Шаблоны страниц
Все системы управления содержанием сайтов используют шаблоны и Смерека в этом отношении не составляет исключения. Шаблон страницы в Смереке – это текстовый документ, содержащий поля подстановки (смеретеги) и (возможно) секции.
В основном шаблоны используются для генерации HTML документов, и поэтому содержит статический HTML код. Но аппарат шаблонов можно с успехом использовать для генерации XML документов и других текстовых документов.
Итак, разработка шаблона начинается с создания статического HTML документа, соответствующего требованиям дизайна сайта и содержащего дополнительные объекты, такие как таблицы стилей, файлы JavaScript, элементы графического оформления.
На следующем шаге шаблон нужно «оживить» за счет вставки смеретегов (полей подстановки).
Пример шаблона
Рассмотрим следующий шаблон:
<html> <head> <title><Smereka Func="GetWinTitle" /></title> <link rel="StyleSheet" type="text/css" href="{Smereka Func="GetHomeURL" /}files/main.css" /> </head> <body> <table> <tr> <td> <Smereka Method="Inspector" Display="Crown" /> </td> <td> <h1> <Smereka Func="GetDocTitle" /> </h1> <Smereka Method="CompiledAttr" /> </td> </tr> </table> <Smereka Func="GetAttr" AttrName="AutonomText" NodeId="2048" /> </body> </html>
Несмотря на его простоту, это полностью работоспособный шаблон, который можно взять за основу для последующего развития. Посмотрим, как он работает.
В заголовке страницы стоит дескриптор заголовка окна (<title>. Значением его выступает смеретег <Smereka Func="GetWinTitle" />. Поскольку параметр NodeId не задан, при компиляции страницы Смерека вызовет функцию GetWinTitle и передаст ей в качестве параметра текущую вершину (из которой компонуется страница). Эта функция в соответствии со своим названием вычислит заголовок страницы, и возвращенная ею строка попадет в результирующий HTML документ. По умолчанию эта функция возвращает атрибут WinTitle вершины, но может делать и более сложные операции.
В описании таблицы стилей мы видим следующий смеретег – {Smereka Func="GetHomeURL" /}. Поскольку по правилам HTML значение атрибута не может быть тегом, его взяли не в ломаные скобки, а в фигурные. Эта функция возвращает URL начальной страницы сайта, например http://www.example.com/. В большинстве случаев имя сайта нам известно, и можно вместо этого смеретега записать его значение; но если приходится переносить сайт с тестового адреса на рабочий, либо иметь несколько версий сайта различного назначения, имеющих различные доменные имена, этот элементарный смеретег кардинально облегчает поддержку шаблонов. Он обеспечивает независимость шаблона от конкретного доменного имени.
В теле документа мы видим таблицу, в левой ячейке которой стоит смеретег <Smereka Method="Inspector" Display="Crown" />. Как выглядит результат его вычисления – можно посмотреть на этой странице (которую вы сейчас читаете). Для генерации навигатора в виде дерева документов используется именно такой смеретег с такими параметрами.
Следующий смеретег <Smereka Func="GetDocTitle" /> вычисляет имя страницы для форматирования ее тегом заголовка верхнего уровня. По умолчанию эта функция возвращает атрибут DocTitle текущей вершины, хотя может делать и более сложные вычисления.
Следующий смеретег <Smereka Method="CompiledAttr" /> загружает атрибут HTMLCode текущей вершины и компилирует его, т.е. вычисляет смеретеги, которые (возможно) содержатся в этом коде. Результатом вычисления является основной код страницы (например, тот, который вы сейчас читаете).
Фрагменты
Последний смеретег шаблона – <Smereka Func="GetAttr" AttrName="AutonomText" NodeId="2048" />. Он извлекает атрибут AutonomText, но не из текущей вершины, а с вершины с ид-ом (например) 2048. Этот автономный текст может содержать, например, код счетчиков, установленных на странице (Google Analytics даже рекомендует размещать код своего счетчика перед концом страницы), или код какого-то рекламного объявления, или еще что-нибудь.
Поскольку этот код не зависит от текущей вершины, его, так же как и адрес сайта, можно внести прямо в шаблон. Вынесение его в отдельную вершину (которая сама по себе не предназначена для генерации веб-страницы) имеет ту выгоду, что облегчает сопровождение и развитие шаблонов.
Эта техника вставки статических блоков кода из отдельных вершин Смереки называется техникой фрагментов. Фрагменты очень облегчают работу, если блок кода нужно вставить в несколько шаблонов и обеспечить его идентичность. Тогда модификация одного фрагмента (например, добавление нового счетчика) автоматически модифицирует все страницы сайта, которые его содержат.
Фрагменты могут быть языково-зависимыми; чтобы этого достичь, надо текст фрагментов хранить в языково-зависимом атрибуте, например, HTMLCode. Таким образом можно обеспечить перевод фрагментов и компоновку страницы с учетом языка, заданного пользователем. Эта техника позволяет подстроить язык показа рекламных объявлений под язык основной страницы, и т.д.
Использование
Когда шаблон создан, его можно отлаживать и использовать. Для этого надо указать Смереке на необходимость его использования, т.е. связать его с каким-либо меташаблоном сайта. Меташаблон может использовать текст шаблона, вставленный в базу данных (рекомендуется), либо в отдельном файле (тогда меташаблону указывается путь и имя файла).
Теперь некоторые вершины в нашем дереве можно связать с новообразованным шаблоном и посмотреть, как выглядят сгенерированные страницы. После необходимой доработки шаблон можно передавать в эксплуатацию.
Дополнительную мощность аппарату шаблонов предоставляют секции, которые позволяют создавать новые шаблоны на основе уже существующих. Об этом – в следующей статье.