====== Как MACRO-шаблон получает данные для вывода? ====== MACRO всегде предполагает, что работает с литеральными переменными и массивами. Поэтому, если вы передаете в MACRO объекты, убедитесь, что они поддерживают интерфейсы [[http://www.php.net/~helly/php/ext/spl/interfaceArrayAccess.html|ArrayAccess]] и [[http://www.php.net/~helly/php/ext/spl/interfaceIterator.html|Iterator]] (для работы с такими тегами как %%{{list}}%%). Для передачи данных в шаблон используются 2 подхода: * **push** - когда данные передаются в шаблон явно из-вне. Так работают большинство шаблонизаторов. * **pull** - когда данные шаблон получает самостоятельно при помощи какого-го вспомогательного API. MACRO поддерживает оба этих подхода. ===== Push - подход ===== lmbMacroTemplate содержит метод **set($variable_name, $value)**, который устанавливает переменную с именем $variable_name в шаблон. Эта переменная будет доступна в шаблоне при помощи выражения {$#variable_name} или {$this->variable_name}. Например: $macro = new lmbMacroTemplate('page.phtml'); $macro->set('title', 'Hello'); В шаблоне для вывода 'title' будет использоваться следующее выраженияе: {$#title} ===== Pull - подход ===== Вы также можете всегда использовать прямые PHP-вставки для того, чтобы получать данные непосредственно в MACRO-шаблоне, например: {{list using='$products' as="$product"}} {{/list}} ==== Данные в MACRO в контроллера Limb-based приложения ==== Если вы создаете приложение, которое работает на базе пакета WEB_APP, то стоит также отметить, что в MACRO-шаблон попадают все публичные переменные контроллера, например: class MyController extends lmbController { function doDisplay() { $this->title = 'Hello'; } } В шаблоне для вывода атрибута $title конроллера можно будет использовать следующее выраженияе: {$#title} Передача данных из контроллера в MACRO-шаблон осуществляется автоматически через промежуточный объект класса lmbMacroView. ===== Контексты данных в MACRO и отличия от WACT-а ===== В MACRO нет контекстов данных в том смысле, какие они были в WACT-е. MACRO-шаблон после компиляции - это класс с методами, которые формируются исходя из наличия %%{{insert}}%% и прочих тегов [[template_composition|композиции шаблонов]]. Все данные в MACRO выводятся из какой-либо переменной, локальной переменной или из атрибута класса, который создался при компиляции. Поэтому в MACRO имеет смысл говорить о: * глобальном контексте - контексте всего класса шаблона * локальном контексте - контексте одного из методов класса шаблона. Такие теги, как [[limb3:ru:packages:macro:tags:core_tags:insert_tag| {{insert}}]] или [[limb3:ru:packages:macro:tags:core_tags:apply_tag| {{apply}}]] позволяют передавать при помощи произвольных атрибутов данные в локальные контексты, которые создаются этими тегами. см. также [[expressions|описание выражений]]