Data Binding Expressions - это термин, который используется в WACT для точного указания пути, откуда следует взять то или иное значение. К сожалению, мы не стали вырабатывать русский термин для этого понятия, поэтому используем просто - DBE.
В разделе Выражения мы показывали примеры выражений, содержащих одно или несколько DBE.
Приведем еще несколько примеров:
{$content|nl2br} {$author.full_name} {$#request.id} {$^article.author.full_name} {$#(current_object)node.url_path} {$$my_ratio} {$item1.count * my_ratio}
DBE состоят из нескольких частей:
Текущий контекст для DBE - это как бы верхняя точка, начиная с которой будет искаться нужная переменная.
Возьмем простой случай выражения: {$content} - это текущий контекст и одно-составный путь до переменной.
В DBE может применяться сложный путь до переменной, например {$author.full_name}. В этом случае, из текущего контейнера данных будет получена переменная author. Если эта переменная также может считаться контейнером данных (например, это ассоциативный массив), из нее будет взята переменная full_name и именно эта переменная будет выведена.
Поясним, к какому php-коду приводит выражение вида {$author.full_name}:
$a001 = $component['0001']->get('author'); echo $a001->get('full_name');
Вот как бы выглядел бы наш шаблон и php-скрипт для демонстрации использования {$author.full_name} и {$title}:
<code:datasource id='article'> Статья: {$title} Автор статьи: {$author.full_name} </code:datasource>
$article_data = array('title' => 'Super Article', 'author' => array('full_name' => 'Vasa Pupkin', 'age' => '19')); $template->setChildDatasource('article', $article_data);
Если же к DBE применяется модификатор контекста, то сначала выясняется, к какому контексту применяется DBE, а затем уже происходит непосредственное получение данных.
Кстати, для php-переменных также поддерживаются пути через точку, например:
{$$article.title} - вывести title из php-переменной $article. Необходимо, чтобы $article поддерживал метод get('title').
Контексты формируют дерево контекстов в откомпилированном шаблоне. При работе с контейнерами данных используются следующие понятия:
DBE по-умолчанию относятся к текущему контекст. То есть:
<h1>{$title}</h1>
Выведет заголовок из глобального контекста, так как он и является текущим для данного выражения.
Однако здесь текущим контекст будет уже другой:
<code:datasource id='title'> <h1>{$title}</h1> </code:datasource>
То, из какого контекст выражение берет свойства, можно изменить:
Примеры:
{$#TodaysDate} - взять TodaysDate из корневого контекста {$^UserName} - взять UserName из родительского контекста {$^^UserName} - взять UserName из контекста на 2 уровня вверх {$#[user]name} - взять из корневого контекста дочерний контекста user и взять из последнего переменную name {$$login} - вывести php-переменную $login. Можно этот пример воспринимать как {$ $login } для наглядности.
Поясним некоторые моменты, связанные с применением модификатора в квадратных скобках:
Эти разделы позволят вам намного лучше понять, каким образом осуществляется интеграция пакетов WACT, ACTIVE_RECORD и WEB_APP.
Обсуждение