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

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


limb3_2007_4:ru:packages:wact:data_containers

Контейнеры данных WACT. Какие данные можно передавать в WACT-шаблоны

Под контекстом в WACT шаблоне мы понимаем такой активный компонент откомпилированного шаблона, который предоставляет для остальных доступ к некоторым данным. Контексты в откомпилированном шаблоне формируют дерево. Это должно быть вам знакомо по материалам разделов:

Контейнер данных - это объект или массив, который передается в контекст в качестве источника данных.

Различают 2 типа контейнеров данных:

  • Обычный контейнер данных, из которого берутся данные для выражений вида {$title}. В WACT их называют datasource.
  • Списковые контейнеры данных, из которых берутся данных для вывода списков (например для тега <list:list>). Списковые контейнеры данных обычно называются итераторами (Iterator) или в терманах WACT-а наборами данных (Dataset).

Обычные контейнеры данных (datasource)

В качестве обычного контейнера данных WACT может использовать следующие объекты:

  • ассоциативный массив
  • объект, который поддерживает интерфейс get()/set() (содержит методы get($field) и set($field, $value))
  • объект, который поддерживает интерфейс ArrayAccess
<core:datasource id='article'>
<h1>{$title}</h1>
{$content}
</core:datasource>

<core:datasource> тег - это тег, который является контекстом. В примере ниже, в этот контекст мы будет передавать различные контейнеры данных.

$template = new WactTemplate('my_template.html');
$article = $template->findChild('article');
 
// Вариант 1. Контейнер данных - обычный массив.
$data = array('title' => 'Item1', 'content' => 'Super article');
$article->registerDatasource($data);
 
// Вариант 2. Контейнер данных - объект класса lmbSet
$data = new lmbSet(array('title' => 'Item1', 'content' => 'Super article'));
$article->registerDatasource($data);
 
// Вариант 3. Контейнер данных - запись из базы данных
$items = lmbDBAL :: fetch('SELECT * FROM item');
$items->rewind();
$data = $items->current();
$article->registerDatasource($data);

Если в WACT пришел контейнер данных в виде объекта, то он проверяет, поддерживает ли тот методы get. Если да, поддерживает, тогда всегда будет использоваться $datasource→get(’title’) вместо datasource[’title’].

Приоритетность использования интерфейса get()/set() активно используется в пакете WEB_APP для интеграции пакетов ACTIVE_RECORD и WACT. Подробнее об этом см. раздел "Использование ACTIVE_RECORD в шаблонах WACT".

Теги, которым соответствуют обычные контейнеры данных:

Итераторы (dataset)

В качестве спискового контейнера данных WACT может использовать обычные массивы, а также любые объекты, которые поддерживают интерфейс итератора (Iterator). Основное условие - чтобы метод current() возвращал нечто, что можно назвать обычным источником данных (datasource-ом). Поэтому вполне подходят:

  • массивы ассоциативных массивов
  • любые итераторы из Limb3, которые поддерживают интерфейс lmbCollectionInterface

Например:

<list:list id='items'>
<ul>
 <list:item><li>{$title}</li></list:item>
</ul>
</list:list>
$template = new WactTemplate('my_template.html');
$list = $template->findChild('items');
 
// Вариант 1. Контейнер данных - обычный массив.
$data = array(array('title' => 'Item1'),
              array('title' => 'Item2'));
$list->registerDataset($data);
 
// Вариант 2. Контейнер данных - итератор.
$data = new lmbCollection(array(array('title' => 'Item1'), array('title' => 'Item2')));
$list->registerDataset($data);
 
// Вариант 3. Контейнер данных - итератор c данными из базы данных.
$data = lmbDBAL :: fetch('SELECT * FROM item');
$list->registerDataset($data);

Таким образом WACT может работать одинаково с объектами класса lmbCollection, c объектами lmbMySqlRecordSet и с обычными многомерными массивами.

Мы рекомендуем вам также взглянуть на Контейнеры данных Limb3 чтобы ознакомиться с классами, которые используются в Limb3 в качестве контейнеров данных.

Теги, в которые передаются списковые контейнеры данных:

Обсуждение

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