<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - Мусорка/AltLinux/Sisyphus/Alterator/templates</title>
<link>http://freesource.info/wiki/Мусорка/AltLinux/Sisyphus/Alterator/templates</link>
<description>History/revisions of FreeSource/Мусорка/AltLinux/Sisyphus/Alterator/templates</description>
<language>en-us</language>
<item>
<title>2006-12-15 15:27:29</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates/show?time=2006-12-15+15%3A27%3A29</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".musorka.altlinux.sisyphus.alterator.templates" href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;templates&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-12-15+15%3A27%3A29">2006-12-15 15:27:29&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates">2006-12-15 15:27:55&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;span class="cite">Замечание: cgi&amp;nbsp;квотирует все&amp;nbsp;строки переданные ему&amp;nbsp;со&amp;nbsp;стороны frontend, поэтому не&amp;nbsp;пытайтесь создавать теги вручную&lt;/span>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;span class="cite">Замечательно: cgi&amp;nbsp;квотирует все&amp;nbsp;строки переданные ему&amp;nbsp;со&amp;nbsp;стороны frontend, поэтому не&amp;nbsp;пытайтесь создавать теги вручную&lt;/span>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-11-14 13:46:28</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates/show?time=2006-11-14+13%3A46%3A28</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;templates&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-14+13%3A46%3A28">2006-11-14 13:46:28&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-12-15+15%3A27%3A29">2006-12-15 15:27:29&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Механика FBI.&lt;br />
В&amp;nbsp;общих чертах всё работает следующим образом. В&amp;nbsp;системе висит alterator с&amp;nbsp;модулями ensign (управляет бакендами) и&amp;nbsp;fbi (управляет фронтендами). Доступ к&amp;nbsp;alterator осуществляется через локальный UNIX-Socket. Рядом настроен http сервер и&amp;nbsp;cgi в&amp;nbsp;нём. При&amp;nbsp;поступлении http-запроса, в&amp;nbsp;cgi происходит декодирование, разбор нужных переменных среды, после чего работа передаётся alterator. Alterator выясняет по&amp;nbsp;адресу к&amp;nbsp;какому backend обращались, выясняет у&amp;nbsp;его напарника (template-*) желаемый frontend и&amp;nbsp;передаёт ему&amp;nbsp;запрос. Frontend делает всё что&amp;nbsp;ему требуется, в&amp;nbsp;том числе запрашивает у&amp;nbsp;backend нужные подробности, берёт html-шаблон,  модифицирует его&amp;nbsp;и&amp;nbsp;отправляет ответ наверх. CGI&amp;nbsp;принимает запрос, преобразует в&amp;nbsp;настоящий html, подправляет по&amp;nbsp;ходу урлы и&amp;nbsp;отдаёт результат пользователю.&lt;br />
Каждый frontend регистрирует две&amp;nbsp;функции, на&amp;nbsp;обработку get&amp;nbsp;и&amp;nbsp;на обработку post запросов.&lt;br />
(register-frontend get-process post-process)&lt;br />
Данная инструкция должна быть последней в&amp;nbsp;тексте frontend (по аналогии с&amp;nbsp;object для&amp;nbsp;бакенда).&lt;br />
Каждая функция принимает следующие параметры:&lt;br />
&lt;ul>&lt;li> &lt;strong>url-args&lt;/strong> &amp;ndash;  параметры запроса. В&amp;nbsp;случае запроса &lt;strong>POST&lt;/strong> url-args также включают в&amp;nbsp;себя данные формы. В&amp;nbsp;случае наличия одинаковых параметров в&amp;nbsp;строке запроса и&amp;nbsp;в форме предпочтение отдаётся вторым. Их&amp;nbsp;формат &amp;ndash; список пар&amp;nbsp;(параметр . значение). Парметр &amp;ndash; строка.
&lt;/li>&lt;li> &lt;strong>template-args&lt;/strong> &amp;ndash; параметры переданные помощником бакенда специально для&amp;nbsp;шаблона, чтобы задать специфическое повееие. Формат &amp;ndash; список пар&amp;nbsp;(параметр . значение). Параметр &amp;ndash; символ.&lt;/li>&lt;/ul>
&lt;span class="cite">Замечательно: cgi&amp;nbsp;квотирует все&amp;nbsp;строки переданные ему&amp;nbsp;со&amp;nbsp;стороны frontend, поэтому не&amp;nbsp;пытайтесь создавать теги вручную&lt;/span>&lt;br />
1. Использование функций &lt;strong>html:&lt;/strong>  и&amp;nbsp;&lt;strong>@&lt;/strong>:&lt;br />
2.  Использование семейства функций &lt;strong>html:&lt;/strong>* :&lt;br />
3.  Использование html-шаблонов.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Шаблоны интерфейсов в&amp;nbsp;FBI.&lt;br />
Основная работа по&amp;nbsp;созданию интерфейсов в&amp;nbsp;FBI состоит в&amp;nbsp;связывании бакендов с&amp;nbsp;формами (основной вариант HTML-формы, но&amp;nbsp;ничто не&amp;nbsp;мешает работать с&amp;nbsp;другими интерфейсами). Формы описываются при&amp;nbsp;помощи так&amp;nbsp;называемых шаблонов. Существует два&amp;nbsp;основных приёма работы:&lt;br />
1. Связывание шаблона с&amp;nbsp;URL. При&amp;nbsp;обращении браузера по&amp;nbsp;данному URL&amp;nbsp;происходит запуск связанного с&amp;nbsp;ним шаблона и&amp;nbsp;генерация требуемых форм.&lt;br />
2. Регистрация шаблона по&amp;nbsp;имени. При&amp;nbsp;обращении браузера по&amp;nbsp;данному URL&amp;nbsp;происходит запрос бакенда-спутника (с префиксом template) с&amp;nbsp;именем равным первой компоненте пути. Например при&amp;nbsp;обращении по&amp;nbsp;URL a/b/c запрашивается бакенд template-a. У&amp;nbsp;бакенда выясняется (через вызов операции template) имя&amp;nbsp;шаблона и&amp;nbsp;параметры к&amp;nbsp;нему после чего собственно и&amp;nbsp;производится запуск требуемого шаблона и&amp;nbsp;передаются ему&amp;nbsp;требуемые параметры.&lt;br />
&lt;span class="cite">Замечание: при&amp;nbsp;наличии двух вариантов одновременно система отдаёт предпочтение первому.&lt;/span>&lt;br />
Второй способ удобен в&amp;nbsp;случае когда администратор выполняет некоторую типовую задачу, совершенно не&amp;nbsp;хочет задумываться о&amp;nbsp;создании какого-либо интерфейсного шаблона, но&amp;nbsp;отлаживать желает уже&amp;nbsp;в&amp;nbsp;некотором интерфейсе. Существуют два&amp;nbsp;заранее подготовленных шаблона: object (для работы со&amp;nbsp;свойствами объекта), list (для работы с&amp;nbsp;группой объектов). В&amp;nbsp;этом варианте работы возможно не&amp;nbsp;создавать отдельного бакенда, а&amp;nbsp;разместить обработку операции template и&amp;nbsp;связанных с&amp;nbsp;ней в&amp;nbsp;основном бакенде и&amp;nbsp;сделать на&amp;nbsp;него символическую ссылку с&amp;nbsp;именем template-&amp;lt;бакенд&amp;gt;.&lt;br />
Первый способ предпочителен на&amp;nbsp;этапе создания законченного продукта с&amp;nbsp;удобным дизайном пользовательского интерфейса. В&amp;nbsp;этом случае вполне возможно что&amp;nbsp;основной дизайн страниц выполняется отдельным человеком.&lt;br />
Возможно сочетание обоих способов работы, когда в&amp;nbsp;особых случаях создаются специализированные формы, а&amp;nbsp;в случае повторения интерфейсов делаются заранее готовые шаблоны.&lt;br />
&lt;span class="cite">Замечание: В&amp;nbsp;связи с&amp;nbsp;последним предложением &amp;ndash; заказывайте шаблоны, если они&amp;nbsp;будут чётко формализованные &amp;ndash; сделаем и&amp;nbsp;добавим в&amp;nbsp;пакет.&lt;/span>&lt;a name="h5147-1">&lt;/a>&lt;h3>Создание и&amp;nbsp;регистрация шаблонов&lt;/h3>
Файл шаблона размещается в&amp;nbsp;каталоге &lt;tt>/usr/share/alterator/templates/&lt;/tt>.  Описание шаблона представляет собой маленькую программу на&amp;nbsp;языке програмирования Scheme (нет никаких проблем в&amp;nbsp;будущих версиях сделать возможной разработку шаблонов на&amp;nbsp;произвольных языках программирования)&lt;br />
Каждый шаблон представляет собой функцию, в&amp;nbsp;результате исполнения которой получается строка &amp;ndash; она&amp;nbsp;и&amp;nbsp;отдаётся в&amp;nbsp;качестве ответа Web-браузеру.&lt;br />
&lt;u>Регистрация шаблона по&amp;nbsp;адресу:&lt;/u>&lt;br />
&lt;ul>&lt;li> &lt;strong>(register-get-url &amp;lt;url&amp;gt; &amp;lt;url-template-proc&amp;gt;)&lt;/strong> &amp;ndash; регистрация процедуры-обработчика запросов &lt;strong>&amp;lt;url-template-proc&amp;gt;&lt;/strong> как&amp;nbsp;шаблона связанного с&amp;nbsp;адресом &lt;strong>&amp;lt;url&amp;gt;&lt;/strong>, возможно задание группы адресов при&amp;nbsp;помощи регулярного выражения. Данная процедура будет вызываться в&amp;nbsp;случае запроса &lt;strong>GET&lt;/strong> (запрос на&amp;nbsp;получение интформации).
&lt;/li>&lt;li> &lt;strong>(register-post-url &amp;lt;url&amp;gt; &amp;lt;url-template-proc&amp;gt;)&lt;/strong> &amp;ndash; регистрация обработчика для&amp;nbsp;запроса &lt;strong>POST&lt;/strong> (запрос на&amp;nbsp;изменение информации).&lt;/li>&lt;/ul>
Каждая процедура &lt;strong>&amp;lt;url-template-proc&amp;gt;&lt;/strong> принимает следующие параметры:&lt;br />
&lt;ul>&lt;li> &lt;strong>url-args&lt;/strong> &amp;ndash;  параметры запроса. В&amp;nbsp;случае запроса &lt;strong>POST&lt;/strong> url-args также включают в&amp;nbsp;себя данные формы. В&amp;nbsp;случае наличия одинаковых параметров в&amp;nbsp;строке запроса и&amp;nbsp;в форме предпочтение отдаётся вторым. Их&amp;nbsp;формат &amp;ndash; список пар&amp;nbsp;(параметр . значение).&lt;/li>&lt;/ul>
&lt;u>Регистрация шаблона по&amp;nbsp;имени:&lt;/u>&lt;br />
&lt;ul>&lt;li> &lt;strong>(register-get-template &amp;lt;name&amp;gt; &amp;lt;name-template-proc)&lt;/strong> &amp;ndash; регистрация процедуры-обработчика запросов &lt;strong>&amp;lt;name-template-proc&amp;gt;&lt;/strong> как&amp;nbsp;шаблона с&amp;nbsp;именем &lt;strong>&amp;lt;name&amp;gt;&lt;/strong>.  Данная процедура будет вызываться в&amp;nbsp;случае запроса &lt;strong>GET&lt;/strong>.
&lt;/li>&lt;li> &lt;strong>(register-post-template &amp;lt;name&amp;gt; &amp;lt;name-template-proc&amp;gt;)&lt;/strong> &amp;ndash; регистрация обработчика для&amp;nbsp;запроса &lt;strong>POST&lt;/strong>.&lt;/li>&lt;/ul>
Каждая продедура &lt;strong>&amp;lt;name-template-proc&amp;gt;&lt;/strong> принимает те&amp;nbsp;же параметры что&amp;nbsp;и&amp;nbsp;&lt;strong>&amp;lt;url-template-proc&amp;gt;&lt;/strong> и&amp;nbsp;ещё один дополнительный:&lt;br />
&lt;ul>&lt;li> &lt;strong>template-args&lt;/strong> &amp;ndash;  параметры шаблона, переданные бакендом-спутником.&lt;/li>&lt;/ul>
HTML &amp;ndash; можно генерировать вручную, а&amp;nbsp;можно воспользоваться накопленным опытом предыдущих поколений. Рассмотрим все&amp;nbsp;эти варианты.&lt;br />
1. Использование функции &lt;strong>format&lt;/strong>. &lt;br />
&lt;div class="indent">Полный аналог функции C&amp;nbsp;printf &amp;ndash; осуществляет форматированный вывод в&amp;nbsp;строку. Синтаксис формата отличается от&amp;nbsp;принятого в&amp;nbsp;C, вместо % используется знак,  возможны следующие варианты:&lt;br />
&lt;ul>&lt;li>  % &amp;ndash; перевод строки
&lt;/li>&lt;li>  A&amp;nbsp;&amp;ndash; вывод выражения как&amp;nbsp;если бы&amp;nbsp;использовалась команда display (проще говоря красивый вывод)
&lt;/li>&lt;li>  S&amp;nbsp;&amp;ndash; выыод выражения как&amp;nbsp;если бы&amp;nbsp;использовалась команда write (вывод так&amp;nbsp;чтобы потом можно было прочитать обратно read, например строки выводятся закавыченные)&lt;/li>&lt;/ul>&lt;/div>
(format #f "&amp;lt;A arg=S&amp;gt;&amp;lt;/~A&amp;gt;&amp;quot; &amp;#8220;tag&amp;#8221; &amp;#8220;param&amp;#8221; &amp;#8220;tag&amp;#8221;)&lt;br />
2. Использование функций &lt;strong>html:&lt;/strong>  и&amp;nbsp;&lt;strong>@&lt;/strong>:&lt;br />
3.  Использование семейства функций &lt;strong>html:&lt;/strong>* :&lt;br />
4.  Использование html-шаблонов.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-11-14 13:07:33</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates/show?time=2006-11-14+13%3A07%3A33</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;templates&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-14+13%3A07%3A33">2006-11-14 13:07:33&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-14+13%3A46%3A28">2006-11-14 13:46:28&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li> &lt;strong>url-args&lt;/strong> &amp;ndash;  параметры запроса. В&amp;nbsp;случае запроса &lt;strong>POST&lt;/strong> url-args также включают в&amp;nbsp;себя данные формы. В&amp;nbsp;случае наличия одинаковых параметров в&amp;nbsp;строке запроса и&amp;nbsp;в форме предпочтение отдаётся вторым. Их&amp;nbsp;формат &amp;ndash; список пар&amp;nbsp;(параметр . значение).&lt;/li>&lt;/ul>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> &lt;strong>url-args&lt;/strong> &amp;ndash;  параметры запроса. В&amp;nbsp;случае запроса &lt;strong>POST&lt;/strong> url-args также включают в&amp;nbsp;себя данные формы. В&amp;nbsp;случае наличия одинаковых параметров в&amp;nbsp;строке запроса и&amp;nbsp;в форме предпочтение отдаётся вторым. &lt;strong>&lt;/strong>ФОРМАТ?! ТИП?!***&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-11-07 18:52:09</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates/show?time=2006-11-07+18%3A52%3A09</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;templates&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-07+18%3A52%3A09">2006-11-07 18:52:09&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-14+13%3A07%3A33">2006-11-14 13:07:33&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li> &lt;strong>url-args&lt;/strong> &amp;ndash;  параметры запроса. В&amp;nbsp;случае запроса &lt;strong>POST&lt;/strong> url-args также включают в&amp;nbsp;себя данные формы. В&amp;nbsp;случае наличия одинаковых параметров в&amp;nbsp;строке запроса и&amp;nbsp;в форме предпочтение отдаётся вторым. &lt;strong>&lt;/strong>ФОРМАТ?! ТИП?!***
&lt;/li>&lt;/ul>&lt;div class="indent">&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> &lt;strong>url-args&lt;/strong> &amp;ndash;  параметры запроса. В&amp;nbsp;случае запроса &lt;strong>POST&lt;/strong> url-args также включают в&amp;nbsp;себя данные формы. В&amp;nbsp;случае наличия одинаковых параметров в&amp;nbsp;строке запроса и&amp;nbsp;в форме предпочтение отдаётся вторым.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-11-02 10:57:13</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates/show?time=2006-11-02+10%3A57%3A13</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;templates&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-02+10%3A57%3A13">2006-11-02 10:57:13&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-07+18%3A52%3A09">2006-11-07 18:52:09&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent">В этом примере теги div&amp;nbsp;с&amp;nbsp;классом &amp;#8220;will-be-replaced&amp;#8221; будут заменены на&amp;nbsp;теги p&amp;nbsp;с содержимым new-content, а&amp;nbsp;в таблицу будет добавлена новая строчка. Но&amp;nbsp;на этом возможности по&amp;nbsp;изменению не&amp;nbsp;заканчиваются. В&amp;nbsp;качестве нового содержимого можно указать процедуру принимающую два&amp;nbsp;параметра options и&amp;nbsp;content, тогда в&amp;nbsp;случае нахождения требуемого тега, процедура исполнится с&amp;nbsp;options, равным полному набору атрибутов найденого тега и&amp;nbsp;content, содержащим внутреннее содержимое тега в&amp;nbsp;виде s-выражения. Таким образом можно например делать custom теги управляемые параметрами.&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (lambda(options content) (html: &amp;#8220;p&amp;#8221; (format #f &amp;laquo;S&amp;quot; options)))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;a name="h5147-1">&lt;/a>&lt;h3>Интернационализация&lt;/h3>
Браузеры могут сообщать свой предпочитаемый язык. Можно этим воспользоваться и&amp;nbsp;сделать многоязычные интерфейсы. Делается это&amp;nbsp;следующим образом.&lt;br />
1.  Отмечаем интересующие фрагменты текста тегами span с&amp;nbsp;параметром translate &amp;#8220;_". Значение параметра translated &amp;ndash; просто некоторое ключевое слово. Задавая разные ключевые слова можно забирать переводы фраз из&amp;nbsp;разных словарей.&lt;br />
..&lt;br />
&amp;lt;span translate="_"&amp;gt;Some text&amp;lt;/span&amp;gt;&lt;br />
..&lt;br />
2.  Поскольку xgettext не&amp;nbsp;умеет вытаскивать переводы, то&amp;nbsp;пользуемся утилиткой alterator-xgettext в&amp;nbsp;комбинации с&amp;nbsp;обычными xgettext.&lt;br />
alterator-xgettext -k _ file.html | xgettext -a -&lt;br />
3.  В&amp;nbsp;месте использования template добавляем инструкции для&amp;nbsp;перевода  &lt;strong>translate-tag:&lt;/strong>, первый параметр &amp;ndash; ключевое слово, второй параметр &amp;ndash; имя&amp;nbsp;словаря.&lt;br />
(template &amp;#8220;file.html&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">(translate-tag: &amp;#8220;_" &amp;#8220;alterator-mypkg&amp;#8221;)&lt;br />
...)&lt;/div>&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;div class="indent">В этом примере теги div&amp;nbsp;с&amp;nbsp;классом &amp;#8220;will-be-replaced&amp;#8221; будут заменены на&amp;nbsp;теги p&amp;nbsp;с содержимым new-content, а&amp;nbsp;в таблицу будет добавлена новая строчка. Но&amp;nbsp;на этом возможности по&amp;nbsp;изменению не&amp;nbsp;заканчиваются. В&amp;nbsp;качестве нового содержимого можно указать процедуру принимающую один параметр options, тогда в&amp;nbsp;случае нахождения требуемого тега, процедура исполнится с&amp;nbsp;options, равным полному набору атрибутов найденого тега. Таким образом можно например делать custom теги управляемые параметрами.&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (lambda(options) (html: &amp;#8220;p&amp;#8221; (format #f &amp;laquo;S&amp;quot; options)))))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-11-02 10:55:03</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates/show?time=2006-11-02+10%3A55%3A03</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;templates&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-02+10%3A55%3A03">2006-11-02 10:55:03&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-02+10%3A57%3A13">2006-11-02 10:57:13&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent">В этом примере все&amp;nbsp;теги custom будут заменены параграфом содержащим перечисление их&amp;nbsp;атрибутов. При&amp;nbsp;желании процедуры можно свободно перемешивать с&amp;nbsp;обычным содержимым.&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;div class="indent">В этом примере все&amp;nbsp;теги custom будут заменены параграфом содержащим перечисление их&amp;nbsp;атрибутов.&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-11-02 10:54:17</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates/show?time=2006-11-02+10%3A54%3A17</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;templates&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-02+10%3A54%3A17">2006-11-02 10:54:17&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-02+10%3A55%3A03">2006-11-02 10:55:03&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent">&lt;span class="cite">Замечание: если захочется ещё чего-то странного &amp;ndash; пишите, заказывайте.&lt;/span>&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;span class="cite">Замечание: если захочется ещё чего-то странного &amp;ndash; пишите, заказывайте.&lt;/span>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-11-02 10:53:19</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates/show?time=2006-11-02+10%3A53%3A19</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;templates&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-02+10%3A53%3A19">2006-11-02 10:53:19&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-02+10%3A54%3A17">2006-11-02 10:54:17&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;span class="cite">Замечание: если захочется ещё чего-то странного &amp;ndash; пишите, заказывайте.&lt;/span>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-11-02 10:34:17</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates/show?time=2006-11-02+10%3A34%3A17</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;templates&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-02+10%3A34%3A17">2006-11-02 10:34:17&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/templates?time=2006-11-02+10%3A53%3A19">2006-11-02 10:53:19&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent">Даже при&amp;nbsp;наличии большого количества функций высокого уровня рисовать html не&amp;nbsp;так удобно. Остаётся ещё масса тегов которые приходится таскать с&amp;nbsp;собой &amp;laquo;в нагрузку&amp;raquo;. Кроме того, давайте дадим поработать дизайнеру (или программе nvu). Загрузка готовго html-шаблона происходит командой &lt;strong>template&lt;/strong>.&lt;br />
(template &amp;laquo;/var/www/html/fbi/my-template.html&amp;raquo;)&lt;br />
Если файл менять не&amp;nbsp;надо, то&amp;nbsp;на этом можно и&amp;nbsp;остановиться, но&amp;nbsp;так бывает крайне редко. Зачастую требуется заполнить форму реальными данными или&amp;nbsp;вообще пересоздать её в&amp;nbsp;зависимости от&amp;nbsp;требований пользователя. Говоря языком разработчика &amp;ndash; требуется &amp;laquo;наложить заплатку&amp;raquo; (patch) на&amp;nbsp;html-файл. Для&amp;nbsp;указания тега с&amp;nbsp;которым надо провести дополнительную работу используется команда *tag:*, первый обязательный параметр команды &amp;ndash; имя&amp;nbsp;тега.&lt;br />
(template &amp;laquo;/var/www/html/fbi/my-template.html&amp;raquo;&lt;br />
&lt;div class="indent">&lt;div class="indent"> (tag: &amp;#8220;p&amp;#8221; &amp;#8220;new content&amp;#8221;))&lt;br />
&lt;/div>&lt;/div>В примере выше будет произведена замена содержимого внутри всех тегов p. Если требуется уточнить теги с&amp;nbsp;какими параметрами должны подлежать обработке, то&amp;nbsp;эти параметры указываются в&amp;nbsp;привычном уже&amp;nbsp;синтаксисе:&lt;br />
(template &amp;laquo;/var/www/html/fbi/my-template.html&amp;raquo;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(tag: &amp;#8220;div&amp;#8221; (@ 'class &amp;#8220;a&amp;#8221;) &amp;#8220;class a&amp;#8221;)&lt;br />
(tag: &amp;#8220;div&amp;#8221; (@ 'class &amp;#8220;b&amp;#8221;) (@ 'subclass &amp;#8220;c&amp;#8221;) &amp;laquo;class b/c&amp;#8221;))&lt;br />
&lt;/div>&lt;/div>&lt;/div>В этом примере будет произведена содержимого внутри тегов div&amp;nbsp;с&amp;nbsp;атрибутом ' class="a" ' на&amp;nbsp;слово &amp;#8220;class a&amp;#8221;, а&amp;nbsp;содержимое тегов div&amp;nbsp;с&amp;nbsp;атрибутом ' class="b&amp;#8221; subclass="c&amp;#8221; ' станет &amp;laquo;class b/c&amp;#8221;.&lt;br />
Возможно не&amp;nbsp;только замена содержимого тегов, особые виды операций указываются в&amp;nbsp;виде параметра 'template-operation. Возможны варианты: replace-content (по-умолчанию), append-content (добавить новое содержимое), replace-tag (заменить весь блок отмеченный данным тегом на&amp;nbsp;что-то новое).&lt;br />
(template &amp;laquo;/var/www/html/fbi/my-template.html&amp;raquo;&lt;br />
&lt;div class="indent">&lt;div class="indent"> (tag: &amp;#8220;div&amp;#8221;  (@ 'class &amp;#8220;will-be-replaced&amp;#8221;) (@ 'template-operation 'replace-tag)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(html: &amp;#8220;p&amp;#8221; &amp;#8220;New content&amp;#8221;))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div> (tag: &amp;#8220;tbody&amp;#8221;     (@ 'template-oparation 'append-content)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(html:tr &amp;#8220;new 1&amp;quot; &amp;laquo;new 2&amp;quot;)))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>В этом примере теги div&amp;nbsp;с&amp;nbsp;классом &amp;#8220;will-be-replaced&amp;#8221; будут заменены на&amp;nbsp;теги p&amp;nbsp;с содержимым new-content, а&amp;nbsp;в таблицу будет добавлена новая строчка. Но&amp;nbsp;на этом возможности по&amp;nbsp;изменению не&amp;nbsp;заканчиваются. В&amp;nbsp;качестве нового содержимого можно указать процедуру принимающую один параметр options, тогда в&amp;nbsp;случае нахождения требуемого тега, процедура исполнится с&amp;nbsp;options, равным полному набору атрибутов найденого тега. Таким образом можно например делать custom теги управляемые параметрами.&lt;br />
(template &amp;laquo;/var/www/html/fbi/my-template.html&amp;raquo;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(tag: &amp;#8220;custom&amp;#8221; (@ 'template-operation 'replace-content)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (lambda(options) (html: &amp;#8220;p&amp;#8221; (format #f &amp;laquo;S&amp;quot; options)))))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>В этом примере все&amp;nbsp;теги custom будут заменены параграфом содержащим перечисление их&amp;nbsp;атрибутов.&lt;br />
&lt;br />
&lt;br />
&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
