====== Отличия 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 уже не будет работать.