{* Объявление виджета *}
{? widget <name>;
<widget_body>
end ?}
{* Использование виджета *}
{* Развернутая форма *}
<< <name> [attr1=<expression1> [attrN=<expressionN> [...]]] >>
<body>
<</ <name> >>
{* Краткая форма (без тела) *}
<< <name> [attr1=<expression1> [attrN=<expressionN> [...]]] />>
Объявляет новый html-подобный элемент, который можно использовать в тексте шаблона.
{* Объявление виджета *}
{? widget page ?}
<html>
<head><title>{{ attrs.title }}</title></head>
<body>{{ body }}</body>
</html>
{? end ?}
{* Использование виджета *}
<<page title="Домашняя страница">>
<h1>Домашняя страница</h1>
Контент
<</page>>
Сразу после объявления виджета он становится доступен для использования в тексте. Тело виджета не имеет доступа к аргументам шаблона, вместо этого имеется доступ к следующим аргументам:
attrs
- ассоциативный массив установленных атрибутов в месте использования виджетаbody
- внутренний контент виджета, определяется в месте использования
В теле виджета можно объявить вложенные виджеты, которые можно будет использовать только внутри родительского виджета.
{? widget mylist;
widget row ?}
<div class="mylist-row">{{ body }}</div>
{? end ?}
<div class="mylist">
{{ body }}
</div>
{? end ?}
{* Использование *}
<<mylist>>
<<row>>Строка 1<</row>>
<<row>>Строка 2<</row>>
<</mylist>>
<<row>>Некорректное использование, row здесь не определен<</row>>