====== Выражения. Вывод значений переменных в шаблоне. ====== Данная страница предполагает, что Вам знакомы следующие понятия: * что такое выражения и фильтры. Начальные сведения об этих элементах можно получить из раздела [[.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]].