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

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


limb3:ru:packages:macro:data_sources

Как MACRO-шаблон получает данные для вывода?

MACRO всегде предполагает, что работает с литеральными переменными и массивами. Поэтому, если вы передаете в MACRO объекты, убедитесь, что они поддерживают интерфейсы ArrayAccess и 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-шаблоне, например:

<? $products = lmbActiveRecord :: find('Product'); ?>
{{list using='$products' as="$product"}}
<ul>
  {{list:item}}
    <li>{$product.title}</li>
  {{list:item}}
</ul>
{{/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}} и прочих тегов композиции шаблонов. Все данные в MACRO выводятся из какой-либо переменной, локальной переменной или из атрибута класса, который создался при компиляции. Поэтому в MACRO имеет смысл говорить о:

  • глобальном контексте - контексте всего класса шаблона
  • локальном контексте - контексте одного из методов класса шаблона.

Такие теги, как {{insert}} или {{apply}} позволяют передавать при помощи произвольных атрибутов данные в локальные контексты, которые создаются этими тегами.

см. также описание выражений

Обсуждение

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