====== Выражения. Вывод значений переменных в шаблоне. ======
Данная страница предполагает, что Вам знакомы следующие понятия:
* что такое выражения и фильтры. Начальные сведения об этих элементах можно получить из раздела [[.intro|"Введение в шаблонную систему WACT. Основные элементы шаблонов"]]
* что такое контейнеры данных и то, что контейнеры данных образуют дерево при выполнении шаблона. Подробнее об этом в разделе [[important_details|"Компиляция и выполнение шаблона. Активные компоненты шаблона. Дерево контейнеров данных."]].
===== Общий вид выражений. =====
**Выражения** - это специальные конструкции шаблонной системы WACT, которые позволяют выводить какие-либо значения (переменные или обычные строки) в шаблон. Выражения также позволяют применять к значениям специальные **фильтры**, то есть модифицировать значения при выводе.
Выражения имеют общий вид: {$Expression[|filter1|filterN]}, где:
* {$...} - знак самого выражения.
* Expression - имя переменной или строка, которую необходимо вывести.
* filter1, filterN - фильтры, применяемые к выводимым данным. Несколько фильтров разделяются вертикальными чертами.
По-умолчанию, WACT применяет функцию htmlspecialchars для всех выражений. То есть специальные символы, такие как
'(одинарные кавычки), "(двойные кавычки), &(амперсанды), <(меньше), >(больше) транформируются в HTML эквиваленты. Для того, чтобы отменить это модификацию, используйте фильтр [[.filters:CoreFilters:RawFilter|raw]], например, {$Content|raw}.
===== Вывод литеральных значений при помощи выражений =====
Выражения иногда используются для вывода литеральных значений, например, строк:
{$"this is a constant"}
{$'this is a constant'}
Например, это применяется для перевода строк:
{$'Search'|i18n:'/search'}
Здесь к константному значению 'Search' будет применен фильтр i18n, который переведет строку на язык пользователя при помощи пакета I18N.
===== Вывод переменных =====
Для вывода значения переменной в шаблон используется конструкция вида {$VariableName} (вернее {$DBE}, но об этом чуть позднее), например:
{$Title}
WACT будет искать переменную с именем Title внутри текущего контейнера данных. Чтобы заполнить значение переменной, указанной в этом маленьком примере, вам может потребоваться приблизительно такой скрипт (помните, что сам шаблон - это корневой контейнер данных):
$template = new Template('/index.html');
$template->set('Title', 'Заголовок страницы');
Тег [[.tags:CoreTags:CoreSetTag|]] можно использовать для того, чтобы определять значение переменных во время фазы компиляции. Это может быть удобно, когда одно выражение используется в нескольких местах.
===== Выражения в качестве атрибутов тегов =====
Выражения могут использоваться также для указания атрибутов обычных HTML-тегов, а также большинства WACT-тегов:
...
Единственное ограничение здесь - это атрибут id, в котором не могут применяться выражения.
===== DBE. Data Binding Expressions =====
На самом деле общий вид выражения для вывода переменной - {$DBE[|filters]}, где DBE - это Data Binding Expression - полный путь до переменной, а [|filters] - опциональный набор фильтров.
DBE в общем виде состоит из двух частей:
* Пути (модификаторы) до контейнера данных.
* Пути до переменной относительно полученного контейнера данных.
Например: {$^^author.name}, что значит: а) получить контейнер данных на 2 уровня выше (контейнеры данных образуют дерево, ак вы помните), чем текущий, б) из него получить переменную author, из которой вывести переменную name.
Подробнее о [[dbe|Data Binding Expressions]].