Данная страница предполагает, что Вам знакомы следующие понятия:
Выражения - это специальные конструкции шаблонной системы WACT, которые имеют 2 основных назначения (это сложилось исторически):
{$percentage} // обычная переменаая из контекста
{$percentage + 5} // арифметическая операция с переменной из контекста
{$item1.count * ratio} // арифметическаия операция с переменными из контекста
<?php $my_ratio = 5 ?>
{$item1.count * $my_ratio} // арифметическаия операция переменной из контекста и php-переменной
<core:repeat times='{$level + 1}'> </core:repeat> <core:if exp="{$ratio > 3}"> Слишком большой множитель </core:if>
То есть применение выражений зависит от ситуации: если выражение стоит просто в шаблоне и не является атрибутом WACT-тега, тогда это - аналог echo, то есть ото выводит значение выражения. Если же выражение является атрибутом WACT-тега, то это по сути просто какое-то значение.
Выражения также позволяют применять к значениям специальные фильтры, то есть модифицировать значения.
Итак, выражения имеют общий вид: {$Expression[|filter1|filterN]}, где:
По-умолчанию, WACT применяет функцию htmlspecialchars для всех выражений, которые используются для вывода. То есть специальные символы, такие как '(одинарные кавычки), «(двойные кавычки), &(амперсанды), <(меньше), >(больше) транформируются в HTML эквиваленты. Для того, чтобы отменить это модификацию, используйте фильтр raw, например, {$Content|raw}.
Выражения иногда используются для вывода литеральных значений, например, строк:
{$"this is a constant"} {$'this is a constant'}
Например, это применяется для перевода строк:
<h1>{$'Search'|i18n:'/search'}</h1>
Здесь к константному значению 'Search' будет применен фильтр i18n, который переведет строку на язык пользователя при помощи пакета I18N.
Для вывода значения в шаблон в простейших случаях используется конструкции вида {$VariableName}, например:
<h1>{$Title}</h1>
WACT запросит поле с именем Title внутри текущего контекста. Чтобы заполнить значение переменной, указанной в этом маленьком примере, вам может потребоваться приблизительно такой скрипт (помните, что сам шаблон - это корневой контекст):
$template = new WactTemplate('/index.html'); $template->set('Title', 'Заголовок страницы');
Выражения могут использоваться также для указания атрибутов обычных HTML-тегов, а также большинства WACT-тегов:
<a class="{$display_class}">...</a> <fetch:param record_id="{$id}"/>
Единственное ограничение здесь - это атрибут id, в котором не могут применяться выражения.
Начиная с версии 0.5 WACT поддерживает в выражениях логические, арифметические и операции сравнения.
Например:
{$var1 * 4 > var2}
WACT поддерживает следующие операции в выражениях:
Части выражения можно группировать при помощи скобок: {$ var1 - (4 - var2)*3 }
По-сути - это обычные php-выражения, лишь с поддержкой значений из контекстов шаблона.
Так как откомпилированный WACT-шаблон - это обычный PHP-код, выражения поддерживают использование в качестве значений или части значений php-переменные. Для этого нужно использовать дополнительный символ $, например:
<?php $my_ratio = 5; ?> {$$my_ratio} // выведет именно php-переменную $my_ratio. Лучше записать {$ $my_ratio}
Вот более сложный случай:
{$ (5 * $my_ratio) > balance} // $my_ratio - php-переменная, а balance - поле из контекста.
В выражениях вида {$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).
Подробнее о Data Binding Expressions.
Обсуждение