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

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


limb3_2007_2:ru:usage:wact:dbe

DBE. Data Binding Expressions

Data Binding Expressions - это термин, который используется в WACT для точного указания, какая именно переменная должна быть использована. К сожалению, мы пока не выработали русский термин для этого понятия, поэтому часто используем просто - DBE.

В разделе Выражения мы указывали, что общий вид всех выражений по выводу переменных - {$DBE[|filter]}.

Например:

{$content|nl2br}
{$author.full_name}
{$#request.id}
{$^article.author.full_name}
{$#(current_object)node.url_path}

DBE состоят из двух частей:

  • путь до контейнера данных (вернее, модификаторы),
  • путь до переменной относительно найденного контейнера данных, где элементы пути разделяются точкой.

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

В простейшем случае {$content} - это текущий контейнер и одно-составный путь до переменной.

В DBE может применяться сложный путь до переменной, например {$author.full_name}. В этом случае, из текущего контейнера данных будет получена переменная author. Если эта переменная также может считаться контейнером данных (например, это ассоциативный массив), из нее будет взята переменная 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, а затем уже происходит непосредственное получение данных.

Контейнеры данных. Модификаторы в выражениях.

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

  • текущий контейнер данных
  • родительский контейнер данных
  • глобальный контейнер данных, или контейнер данных шаблона
  • дочерний контейнер данных (непосредственный дочерний элемент или же на несколько уровней ниже).

DBE по-умолчанию относятся к текущему контейнеру данных. То есть:

<h1>{$title}</h1>

Выведет заголовок из глобального контейнера данных, так как он и является текущим для выражения.

Однако здесь текущим контейнером данных будет уже другой:

<code:datasource id='title'>
<h1>{$title}</h1>
</code:datasource>

То, из какого контейнера данных выражение берет свойства, можно изменить:

  • префикс # означает использование глобального контейнера данных.
  • префикс ^ означает использование родительского контейнера данных. Данный префикс можно использовать несколько раз.
  • в скобках можно указать имя (идентификатор) дочернего контейнера (поддерживается с версии WACT 0.3)

Примеры:

{$#TodaysDate} - взять TodaysDate из корневого контейнера
{$^UserName} - взять UserName из родительского контейнера
{$^^UserName} - взять UserName из контейнера на 2 уровня вверх
{$#(user)name} - взять из корневого контейнера дочерний контейнер user и взять из последнего переменную name

Поясним некоторые моменты, связанные с применением модификатора в скобках:

  • дочерний элемент с указанным идентификатором должен обязательно существовать и быть знаком компилятору еще до использования в DBE.
  • дочерний элемент ищется с указанного уровня (в зависимости от использования # и ^) и ниже на всю глубину дерева.
  • можно указывать несколько модификаторов в скобках, как бы уточняя их, например, {$#(content)(node)title}
  • после модификатора в скобках запятая не используется. Запятые могут использовать уже для разделения элементов пути до переменной, например: {$#(content)(node)object.content}

Применение DBE

DBE применяется:

  • В выражениях
  • В значениях атрибутов, когда это специально оговорено, например, атрибут from тегов <core:datasource> и <list:list>, атрибут for тегов <core:default> и тег <core:optional> и т.д.

Например:

<core:optional for="#user.is_logged_in">You are logged in</core:optional>

В данном примере, для компилятора шаблонной системы «#user.is_logged_in» - это DBE.

Дополнительная информация

  • В разделе "Контейнеры данных WACT" можно найти информацию о том:
    • какие контейнеры данных можно и лучше всего использовать в WACT-шаблонах,
    • как наиболее эффективно использовать WACT для вывода данных из Модели приложения,
    • как передавать данные из одного контейнера данных в другой, используя DBE.
  • В разделе "Передача данных внутри шаблонов" рассказано о том, как при помощи DBE и некоторых тегов можно передавать данные внутри шаблона из одного контейнера данных в другой.

Эти разделы позволят вам намного лучше понять, каким образом осуществляется интеграция пакетов WACT, ACTIVE_RECORD и WEB_APP.

Обсуждение

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