====== DBE. Data Binding Expressions ====== **Data Binding Expressions** - это термин, который используется в WACT для точного указания, какая именно переменная должна быть использована. К сожалению, мы пока не выработали русский термин для этого понятия, поэтому часто используем просто - **DBE**. В разделе [[.expressions|Выражения]] мы указывали, что общий вид всех выражений по выводу переменных - {$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}: Статья: {$title} Автор статьи: {$author.full_name} $article_data = array('title' => 'Super Article', 'author' => array('full_name' => 'Vasa Pupkin', 'age' => '19')); $template->setChildDatasource('article', $article_data); Если же к DBE применяется модификатор контейнера данных, то сначала выясняется, к какому контейнеру данных применяется DBE, а затем уже происходит непосредственное получение данных. ===== Контейнеры данных. Модификаторы в выражениях. ===== Контейнеры данных формируют дерево контейнеров данных. При работе с контейнерами данных используются следующие понятия: * текущий контейнер данных * родительский контейнер данных * глобальный контейнер данных, или контейнер данных шаблона * дочерний контейнер данных (непосредственный дочерний элемент или же на несколько уровней ниже). DBE по-умолчанию относятся к текущему контейнеру данных. То есть:

{$title}

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

{$title}

То, из какого контейнера данных выражение берет свойства, можно изменить: * префикс **#** означает использование **глобального** контейнера данных. * префикс **^** означает использование **родительского** контейнера данных. Данный префикс можно использовать несколько раз. * **в скобках** можно указать имя (идентификатор) **дочернего** контейнера (поддерживается с версии 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** тегов [[.tags:CoreTags:CoreDatasourceTag|]] и [[.tags:ListTags:ListListTag|]], атрибут **for** тегов [[.tags:CoreTags:CoreDefaultTag|]] и тег [[.tags:CoreTags:CoreOptionalTag|]] и т.д. Например: You are logged in В данном примере, для компилятора шаблонной системы "#user.is_logged_in" - это DBE. ===== Дополнительная информация ===== * В разделе [[data_containers|"Контейнеры данных WACT"]] можно найти информацию о том: * какие контейнеры данных можно и лучше всего использовать в WACT-шаблонах, * как наиболее эффективно использовать WACT для вывода данных из Модели приложения, * как передавать данные из одного контейнера данных в другой, используя DBE. * В разделе [[data_transfer|"Передача данных внутри шаблонов"]] рассказано о том, как при помощи DBE и некоторых тегов можно передавать данные внутри шаблона из одного контейнера данных в другой. Эти разделы позволят вам намного лучше понять, каким образом осуществляется интеграция пакетов WACT, ACTIVE_RECORD и WEB_APP.