Початкова сторінка

Микола Жарких (Київ)

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

?

Шаблони сторінок

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

Здебільшого шаблони використовуються для генерації 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. Таким чином можна забезпечити переклад фрагментів і компоновку сторінки відповідно до мови, заданої користувачем. Ця техніка дозволяє підлаштувати мову показу рекламних оголошень під мову основної сторінки, і т.д.

Використання

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

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

Додаткової потужності апарату шаблонів надають секції, які дозволяють створювати нові шаблони на основі вже існуючих. Про це – в наступній статті.