====== Введение в шаблонную систему WACT ======
Первоначально, WACT (Web Application Component Toolkit ) - это другой фреймворк, как и Limb. Однако уже долгое время этот проект активно не развивается, и, чтобы хорошие идеи не пропадали зря, мы адаптировали некоторые его составляющие под свои нужды, в частности DBAL, VALIDATION и собственно сам шаблонизатор.
Шаблонизатор WACT (далее просто WACT) - это очень мощный, легко расширяемый и быстрый инструмент php-разработчика. WACT позволяет легко и чисто разделять презентационную логику от логики приложения, при этом не требует много времени на первоначальное освоение.
В рамках данного раздела мы рассмотрим основные элементы шаблонов WACT.
===== Пример шаблона =====
Newsline
Main page
{$'Newsline'|uppercase}
- {$date|date:'Y-m-d'}. {$title}
-
{$annotation|raw}
more...
===== Основные элементы WACT шаблона =====
==== Теги ====
В нашем примере:
[...]
[...]
Теги обычно должны иметь закрывающий тег (как или ).
:!: В версиях с 0.3 - по 0.4 включительно в WACT действовало правило обязательности сбалансированности шаблонов, то есть каждый тег должен иметь закрывающий тег. Правило закрытых тегов касалось как WACT-тегов, так и обычных HTML-тегов. В версии 0.5 это правило было отменено.
Теги могут содержать один или несколько атрибутов. Например, тег содержит атрибуты **using** и **target**. Одним из основных атрибутов любого тега является атрибут **id**, который является обязательным. Даже если вы не указали данный атрибут, то компилятор шаблона сам присвоит тегу идентификатор. **Id** используется для того, чтобы иметь возможность найти тег и как-либо изменить его свойства или поведение в php-скрипте.
К тегам могут применяться некоторые правила. Например, одни теги могут находиться только внутри других тегов, некоторые теги должны содержать обязательные атрибуты, некоторые атрибуты должны содержать только определенные значения и т.д. В большинстве случаев компилятор шаблонов самостоятельно проверяет правильность синтаксиса шаблона и выдает подробное описание ошибки, если она есть.
WACT содержит достаточное большое количество тегов, плюс к этому, в Limb добавлены некоторые специфические теги, которые могут потребоваться при повседневной работе. Так что в большинстве случаев возможностей базового набора тегов вам должно хватить.
==== Выражения ====
Выражения (output expressions) используются для вывода каких-либо значений, например, переменных или обычных строк.
Выражения в нашем примере:
{$title}
{$date|date:'Y-m-d'}
{$annotation|raw}
{$'Newsline'|uppercase}
Значение, которое будет выведено при помощи выражения, может быть значением переменной, как в случае с {$title} и {$date}, так и константой, как в случае с {$'Newsline'|uppercase}.
Выражения, стоящие в шаблонах - это по сути операции echo. В некоторых случаях, когда выражение является атрибутом тега, оно просто указывает на значение.
По-умолчанию WACT применяет функцию htmlspecialchars для каждого выражения, если его не отметить при помощи фильтра raw (см. ниже).
Подробно выражения описаны в разделе [[.expressions|"Выражения"]].
==== Фильтры ====
Фильтры используются для модификации/форматирования значений, выводимых в выражениях.
Выражения с фильрами в нашем примере:
{$date|date:'Y-m-d'}
{$annotation|raw}
{$'Newsline'|uppercase}
Использованы 3 фильтра:
* uppercase - для перевода значения в верхний регистр
* raw - для отмены применения htmlspecialchars к выводимому значению
* date - для форматирования даты.
Обычно фильтр представляет из себя враппер для какой-нибудь часто используемой функции php. Однако, ничего не мешает создавать свои уникальные фильтры, так как делать это достаточно просто.
Подробно фильтры описаны в разделе [[.filters|"Фильтры"]].
==== Предопределенные свойства внутри тегов ====
Иногда в шаблонах используются так называемые "Предопределенные свойства", то есть некие переменные, которые доступны внутри некоторых тегов.
Хорошим примером является ListRowNumber, которое содержит номер текущий строки в списке:
Вот пример шаблона, который использует значение ListRowNumber:
{$ListRowNumber}. {$title}
Обычно выражения со свойствами тегов отличают от обычных выражений, которые выводят значения переменны при помощи символя двоеточния ":", например:
{$:ListRowNumber}. {$title}
==== Дальнейшее чтение ====
* [[.important_details|"Компиляция и выполнение шаблона. Активные компоненты шаблона. Дерево контейнеров данных."]] - описывает кратко механизм работы WACT-шаблонизатора. Без прочтения этого раздела пользоваться WACT-ом нереально.
* [[.how_to_run_wact_only|"Рендеринг WACT шаблона. Использование пакета WACT"]] - описывает кратко использование шаблонизатора без использования других пакетов Limb.