====== Отличия MACRO от WACT-а ======
* MACRO **не использует XML-подобный синтаксис для тегов**. Благодаря этому MACRO-теги не теряются среди html-тегов, а также позволяет использовать MACRo-теги для генерации атрибутов обычных html-гов, что в WACT-е невозможно.
Пример MACRO-шаблона:
{{list using='$tags' as="$item"}}
{{/list}}
* Скомпилированный шаблон MACRO - это уникальный класс, содержащий различные методы. Скомпилированный шаблон WACT-а представляет из себя 2 функции: инициализирующая и исполняющая.
* В MACRO **нет дерева контекстов данных**. Все данные в MACRO выводятся из php-переменных. Модификатор, который в WACT-е указывает на корневой контекст данных, в MACRO указывает на переменную из сгенерированного класса шаблона, то есть аналог $this->var_name. Например, вышеуказанный пример с тегом **list** можно записать в виде обычного php-кода и все станет ясно.
{{list using='$tags' as="$item"}}
{{/list}}
(На самом деле код немного сложнее для обеспечения работы тегов **list:empty**, **list:fill** и других, но принцип должен быть понятен).
* В MACRO **нет** так называемых **предопределенных свойств тегов**. Вместо них теги сами генерят специальные переменные, которые могут понадобиться в работе с этими тегами, например $counter для **list** тега.
* MACRO **не поддерживает арифметических и логических операций в выражениях**, как это имеет место в WACT-е. Это сделано специально, дабы не усложнять архитектуру. Арифметические, логические и прочие операции рекомендуется производить в отдельных php-вставках.
* В MACRO нет аналогов тегов , , , , тегов и т.д. Мы пришли к выводу, что эти операции лучше делать php-кодом прямо в шаблонах. Если вы все же скучаете по этим тегам, можете реализовать свои аналоги.
* В MACRO также **нет дерева компонентов времени исполнения**. Это не значит, что в MACRO вообще нет runtime-компонентов, но добраться до них извне, как это есть в WACT-е, уже нельзя. Для передачи данных в компоненты используются обыкновенные переменные сгенерированного класса шаблона. Сами runtime-компоненты - это тоже атрибуты сгенерированного класса шаблона. Например, для передачи данных в форму можно использовать:
MACRO шаблон:
{{form name="my_form"}}
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 уже не будет работать.