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

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


limb3:ru:packages:macro:diffs_from_wact

Отличия MACRO от WACT-а

  • MACRO не использует XML-подобный синтаксис для тегов. Благодаря этому MACRO-теги не теряются среди html-тегов, а также позволяет использовать MACRo-теги для генерации атрибутов обычных html-гов, что в WACT-е невозможно.

Пример MACRO-шаблона:

 <ul>
   <li><a href='{{route_url params="controller:member_home,action:personal"}}'>Изменить личные данные</a></li>
   <li><a href='{{route_url params="controller:member_home,action:change_password"}}'>Сменить пароль</a></li>
 </ul>
 
{{list using='$tags' as="$item"}}
<ul id='tags'>
{{list:item}}
<li><a href='/photo_category/item/{$#category.id}?tag={$item.id}' style="font-size:<?=($item['weight']+3)?>">{$item.title}</a></li>
{{/list:item}}
</ul>
{{/list}}
  • Скомпилированный шаблон MACRO - это уникальный класс, содержащий различные методы. Скомпилированный шаблон WACT-а представляет из себя 2 функции: инициализирующая и исполняющая.
  • В MACRO нет дерева контекстов данных. Все данные в MACRO выводятся из php-переменных. Модификатор, который в WACT-е указывает на корневой контекст данных, в MACRO указывает на переменную из сгенерированного класса шаблона, то есть аналог $this→var_name. Например, вышеуказанный пример с тегом list можно записать в виде обычного php-кода и все станет ясно.
{{list using='$tags' as="$item"}}
<ul id='tags'>
{{list:item}}
<li><a href='/photo_category/item/{$#category.id}?tag={$item.id}' style="font-size:<?=($item['weight']+3)?>">{$item.title}</a></li>
{{/list:item}}
</ul>
{{/list}}
 
<?php // Теперь аналог на php
 
if(count($tags)) { ?>
<ul id='tags'>
<?php foreach($tags as $item} { ?>
<li><a href='/photo_category/item/<?php echo $this->category['id']; ?>?tag=<?php echo $item['id']; ?>' style="font-size:<?php echo($item['weight']+3)?>">
<?php echo $item['title']; ?>
</a>
</li>
<?php } ?>
</ul>
<?php } ?>

(На самом деле код немного сложнее для обеспечения работы тегов list:empty, list:fill и других, но принцип должен быть понятен).

  • В MACRO нет так называемых предопределенных свойств тегов. Вместо них теги сами генерят специальные переменные, которые могут понадобиться в работе с этими тегами, например $counter для list тега.
  • MACRO не поддерживает арифметических и логических операций в выражениях, как это имеет место в WACT-е. Это сделано специально, дабы не усложнять архитектуру. Арифметические, логические и прочие операции рекомендуется производить в отдельных php-вставках.
  • В MACRO нет аналогов тегов <core:optional>, <core:default>, <core:set>, <core:if>, <fetch> тегов и т.д. Мы пришли к выводу, что эти операции лучше делать php-кодом прямо в шаблонах. Если вы все же скучаете по этим тегам, можете реализовать свои аналоги.
  • В MACRO также нет дерева компонентов времени исполнения. Это не значит, что в MACRO вообще нет runtime-компонентов, но добраться до них извне, как это есть в WACT-е, уже нельзя. Для передачи данных в компоненты используются обыкновенные переменные сгенерированного класса шаблона. Сами runtime-компоненты - это тоже атрибуты сгенерированного класса шаблона. Например, для передачи данных в форму можно использовать:

MACRO шаблон:

 {{form name="my_form"}}
 <?php $ds = $this->form_my_form->getDatasource();
  if(isset($ds["value"])) echo $ds["value"]; ?>
 {{/form}}
 

Управляющий php-код:

  $page = new lmbMacroTemplate('my_template.phtml');
  $page->set('form_my_form_datasource', array("value" => 1111)); 

В принципе, если вы работаете с пакетом VIEW, то о передаче данных и ошибок валидации в runtime-компоненты форм заботится lmbMacroView.

  • В MACRO нет отличий динамических атрибутов тегов от статических. Все аттрибуты воспринимаются единообразно. Это иногда значительно упрощает реализацию тегов и фильтров. Подробнее об этом в разделе для разрабочиков расширений для MACRO.
  • При помощи выражений output expressions в MACRO можно выводить только значения переменных. То есть вариант с выводом константного значения типа {$'newsline'|uppercase} в MACRO уже не будет работать.

Обсуждение

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