Начальная страница

Николай Жарких (Киев)

Персональный сайт

?

Шаблоны страниц

Все системы управления содержанием сайтов используют шаблоны и Смерека в этом отношении не составляет исключения. Шаблон страницы в Смереке – это текстовый документ, содержащий поля подстановки (смеретеги) и (возможно) секции.

В основном шаблоны используются для генерации 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. Таким образом можно обеспечить перевод фрагментов и компоновку страницы с учетом языка, заданного пользователем. Эта техника позволяет подстроить язык показа рекламных объявлений под язык основной страницы, и т.д.

Использование

Когда шаблон создан, его можно отлаживать и использовать. Для этого надо указать Смереке на необходимость его использования, т.е. связать его с каким-либо меташаблоном сайта. Меташаблон может использовать текст шаблона, вставленный в базу данных (рекомендуется), либо в отдельном файле (тогда меташаблону указывается путь и имя файла).

Теперь некоторые вершины в нашем дереве можно связать с новообразованным шаблоном и посмотреть, как выглядят сгенерированные страницы. После необходимой доработки шаблон можно передавать в эксплуатацию.

Дополнительную мощность аппарату шаблонов предоставляют секции, которые позволяют создавать новые шаблоны на основе уже существующих. Об этом – в следующей статье.