WACT позволяет вставлять любой php-код в шаблоны, например:
<select name='my_selector'> <?php foreach($items as $item) { echo '<option value="'. $item['value'] . '" '; if(some_condition()) echo 'selected'; echo '>'. $item['title'] .'</option>'; } ?> </select>
Корневой компонент (корень дерева фазы выполнения) доступен в этих вставках в виде переменной $template.
Поэтому вы можете в самом шаблоны выполнять функции получения и анализа данных, например:
<?php $items = lmbActiveRecord :: find('Items'); $list = $template->getChild('data'); $list->registerDataset($items); ?> <list:list id='data'> <ul> <list:item> <li>{$title}</li> </list:item> </ul> </list:list>
Начиная с версии WACT 0.5 DBE поддерживают PHP-переменные, поэтому вышеуказанный пример с <list:list> можно записать иначе:
<?php $items = lmbActiveRecord :: find('Items'); ?> <list:list from='{$$items}'> <ul> <list:item> <li>{$title}</li> </list:item> </ul> </list:list>
Или чуть в окороченной версии:
<?php $items = lmbActiveRecord :: find('Items'); ?> <list:list from='$items'> <ul> <list:item> <li>{$title}</li> </list:item> </ul> </list:list>
Нужно понимать, что во втором случае, все же «$items» будет внутри преобразовано к общему виду выражения «{$$items}» и затем уже обработано WACT-ом, но краткая форма, согласитесь, нагляднее.
Такие теги, как <list:item>, <core:datasource> и <form>, которые являются контекстами, также генерят в шаблон специальные php-переменные, ссылающиеся на контейнеры данных, то есть на объекты, которые были переданы в эти теги в качестве источников данных.
Например:
<core:datasource id='article'> <?php echo $article->get('title'); ?> </core>
Тег <core:datasource> создал в шаблоне php-переменную с имененем в соответствие с идентификатором тега (article). Кстати, для данного примера, выражения:
{$title} {$$article.title}
полностью одинаковы.
Обсуждение