Инструменты пользователя

Инструменты сайта


limb3:ru:packages:wact:php_code_in_templates

Использование php-кода в шаблонах

PHP-блоки в шаблонах

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>

PHP-переменные в шаблонах

Начиная с версии 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-ом, но краткая форма, согласитесь, нагляднее.

PHP-переменные контекстов

Такие теги, как <list:item>, <core:datasource> и <form>, которые являются контекстами, также генерят в шаблон специальные php-переменные, ссылающиеся на контейнеры данных, то есть на объекты, которые были переданы в эти теги в качестве источников данных.

Например:

<core:datasource id='article'>
  <?php echo $article->get('title'); ?>
</core>

Тег <core:datasource> создал в шаблоне php-переменную с имененем в соответствие с идентификатором тега (article). Кстати, для данного примера, выражения:

{$title}
{$$article.title}

полностью одинаковы.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   ___  __  __   ____  __  __  ____
  / _ \ \ \/ /  /  _/ / / / / /_  /
 / // /  \  /  _/ /  / /_/ /   / /_
/____/   /_/  /___/  \____/   /___/
 
limb3/ru/packages/wact/php_code_in_templates.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)