MACRO всегде предполагает, что работает с литеральными переменными и массивами. Поэтому, если вы передаете в MACRO объекты, убедитесь, что они поддерживают интерфейсы ArrayAccess и Iterator (для работы с такими тегами как {{list}}).
Для передачи данных в шаблон используются 2 подхода:
MACRO поддерживает оба этих подхода.
lmbMacroTemplate содержит метод set($variable_name, $value), который устанавливает переменную с именем $variable_name в шаблон. Эта переменная будет доступна в шаблоне при помощи выражения {$#variable_name} или {$this→variable_name}.
Например:
$macro = new lmbMacroTemplate('page.phtml'); $macro->set('title', 'Hello');
В шаблоне для вывода 'title' будет использоваться следующее выраженияе:
{$#title}
Вы также можете всегда использовать прямые PHP-вставки для того, чтобы получать данные непосредственно в MACRO-шаблоне, например:
<? $products = lmbActiveRecord :: find('Product'); ?> {{list using='$products' as="$product"}} <ul> {{list:item}} <li>{$product.title}</li> {{list:item}} </ul> {{/list}}
Если вы создаете приложение, которое работает на базе пакета WEB_APP, то стоит также отметить, что в MACRO-шаблон попадают все публичные переменные контроллера, например:
class MyController extends lmbController { function doDisplay() { $this->title = 'Hello'; } }
В шаблоне для вывода атрибута $title конроллера можно будет использовать следующее выраженияе:
{$#title}
Передача данных из контроллера в MACRO-шаблон осуществляется автоматически через промежуточный объект класса lmbMacroView.
В MACRO нет контекстов данных в том смысле, какие они были в WACT-е. MACRO-шаблон после компиляции - это класс с методами, которые формируются исходя из наличия {{insert}} и прочих тегов композиции шаблонов. Все данные в MACRO выводятся из какой-либо переменной, локальной переменной или из атрибута класса, который создался при компиляции. Поэтому в MACRO имеет смысл говорить о:
Такие теги, как {{insert}} или {{apply}} позволяют передавать при помощи произвольных атрибутов данные в локальные контексты, которые создаются этими тегами.
см. также описание выражений
Обсуждение