====== Выражения. Вывод значений переменных в шаблоне. ======
Данная страница предполагает, что Вам знакомы следующие понятия:
* что такое выражения и фильтры. Начальные сведения об этих элементах можно получить из раздела [[.intro|"Введение в шаблонную систему WACT. Основные элементы шаблонов"]]
* что такое контексты и то, что контексты образуют дерево при выполнении шаблона. Подробнее об этом в разделе [[important_details|"Компиляция и выполнение шаблона. Активные компоненты шаблона. Дерево контекстов."]].
===== Общий вид выражений. =====
**Выражения** - это специальные конструкции шаблонной системы WACT, которые имеют 2 основных назначения (это сложилось исторически):
* **для вывода значений переменных** или других конструкций **в шаблонах**
{$percentage} // обычная переменаая из контекста
{$percentage + 5} // арифметическая операция с переменной из контекста
{$item1.count * ratio} // арифметическаия операция с переменными из контекста
{$item1.count * $my_ratio} // арифметическаия операция переменной из контекста и php-переменной
* **формируют динамические значения тегов**
Слишком большой множитель
То есть применение выражений зависит от ситуации: если выражение стоит просто в шаблоне и не является атрибутом WACT-тега, тогда это - аналог echo, то есть ото выводит значение выражения. Если же выражение является атрибутом WACT-тега, то это по сути просто какое-то значение.
Выражения также позволяют применять к значениям специальные **фильтры**, то есть модифицировать значения.
Итак, выражения имеют общий вид: {$Expression[|filter1|filterN]}, где:
* {$...} - знак самого выражения.
* Expression - имя переменной, строка, набор арифметических или логических операций над несколькими переменными, который необходимо вывести или подсчитать.
* filter1, filterN - фильтры, применяемые к данным. Несколько фильтров разделяются вертикальными чертами.
**По-умолчанию, WACT применяет функцию htmlspecialchars для всех выражений, которые используются для вывода**. То есть специальные символы, такие как
'(одинарные кавычки), "(двойные кавычки), &(амперсанды), <(меньше), >(больше) транформируются в HTML эквиваленты. Для того, чтобы отменить это модификацию, используйте фильтр [[.filters:core_filters:raw_filter|raw]], например, {$Content|raw}.
===== Вывод литеральных значений при помощи выражений =====
Выражения иногда используются для вывода литеральных значений, например, строк:
{$"this is a constant"}
{$'this is a constant'}
Например, это применяется для перевода строк:
{$'Search'|i18n:'/search'}
Здесь к константному значению 'Search' будет применен фильтр i18n, который переведет строку на язык пользователя при помощи пакета I18N.
===== Вывод значений переменных из контекстов =====
Для вывода значения в шаблон в простейших случаях используется конструкции вида **{$%%VariableName%%}**, например:
{$Title}
WACT запросит поле с именем Title внутри текущего контекста. Чтобы заполнить значение переменной, указанной в этом маленьком примере, вам может потребоваться приблизительно такой скрипт (помните, что сам шаблон - это корневой контекст):
$template = new WactTemplate('/index.html');
$template->set('Title', 'Заголовок страницы');
===== Выражения в качестве атрибутов тегов =====
Выражения могут использоваться также для указания атрибутов обычных HTML-тегов, а также большинства WACT-тегов:
...
Единственное ограничение здесь - это атрибут id, в котором не могут применяться выражения.
===== Сложные выражения. Поддержка логических и арифметических операций =====
Начиная с версии 0.5 WACT поддерживает в выражениях логические, арифметические и операции сравнения.
Например:
{$var1 * 4 > var2}
WACT поддерживает следующие операции в выражениях:
* **математические операции**:
* * - умножение
* / - деление
* + - сложение
* - - вычитание
* % - деление на цело
* **логические операции:**
* && - аналог AND
* || - аналог OR
* ! - аналог NOT
* **операторы сравнения:**
* > - больше
* < - меньше
* == - равно
* != - неравно
* >= - больше или равно
* <= - меньше или равно
Части выражения можно группировать при помощи скобок: {$ var1 - (4 - var2)*3 }
По-сути - это обычные php-выражения, лишь с поддержкой значений из контекстов шаблона.
===== PHP-переменные в выражениях =====
Так как откомпилированный WACT-шаблон - это обычный PHP-код, выражения поддерживают использование в качестве значений или части значений php-переменные. Для этого нужно использовать дополнительный символ $, например:
{$$my_ratio} // выведет именно php-переменную $my_ratio. Лучше записать {$ $my_ratio}
Вот более сложный случай:
{$ (5 * $my_ratio) > balance} // $my_ratio - php-переменная, а balance - поле из контекста.
===== DBE. Data Binding Expressions =====
В выражениях вида {$item1.count * #ratio}, item1.count и #ratio - это так называемые DBE. DBE - это Data Binding Expression - конструкции, описывающие полный путь до поля в каком-нибудь контексте или до самого контекста.
DBE в общем виде состоит из двух частей:
* Пути (модификаторы) до контейнера данных.
* Пути до переменной относительно полученного контейнера данных.
Например: {$^^author.name}, что значит: а) получить контекст на 2 уровня выше, чем текущий (контексты образуют дерево, как вы помните), б) из него получить переменную author, из которой вывести переменную name.
Кстати, php-переменные также являются частью DBE-концепции, поэтому для них также можно использовать конструкции вида {$$var.subvar1.subvar2}, конечно, если объект, на которые ссылается $var поддерживает метод get($field).
Подробнее о [[dbe|Data Binding Expressions]].