Инструменты пользователя

Инструменты сайта


limb3:ru:packages:wact:expressions

Выражения. Вывод значений переменных в шаблоне.

Данная страница предполагает, что Вам знакомы следующие понятия:

Общий вид выражений.

Выражения - это специальные конструкции шаблонной системы WACT, которые имеют 2 основных назначения (это сложилось исторически):

  • для вывода значений переменных или других конструкций в шаблонах
{$percentage} // обычная переменаая из контекста
{$percentage + 5} // арифметическая операция с переменной из контекста
{$item1.count * ratio} // арифметическаия операция с переменными из контекста
 
<?php $my_ratio = 5 ?>
{$item1.count * $my_ratio} // арифметическаия операция переменной из контекста и php-переменной
  • формируют динамические значения тегов
  <core:repeat times='{$level + 1}'>
    &nbsp;&nbsp;
  </core:repeat>
 
  <core:if exp="{$ratio > 3}">
    Слишком большой множитель
  </core:if>

То есть применение выражений зависит от ситуации: если выражение стоит просто в шаблоне и не является атрибутом WACT-тега, тогда это - аналог echo, то есть ото выводит значение выражения. Если же выражение является атрибутом WACT-тега, то это по сути просто какое-то значение.

Выражения также позволяют применять к значениям специальные фильтры, то есть модифицировать значения.

Итак, выражения имеют общий вид: {$Expression[|filter1|filterN]}, где:

  • {$…} - знак самого выражения.
  • 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 поддерживает следующие операции в выражениях:

  • математические операции:
    • * - умножение
    • / - деление
    • + - сложение
    • - - вычитание
    • % - деление на цело
  • логические операции:
    • && - аналог AND
    • || - аналог OR
    • ! - аналог NOT
  • операторы сравнения:
    • > - больше
    • < - меньше
    • == - равно
    • != - неравно
    • >= - больше или равно
    • ⇐ - меньше или равно

Части выражения можно группировать при помощи скобок: {$ var1 - (4 - var2)*3 }

По-сути - это обычные php-выражения, лишь с поддержкой значений из контекстов шаблона.

PHP-переменные в выражениях

Так как откомпилированный WACT-шаблон - это обычный PHP-код, выражения поддерживают использование в качестве значений или части значений php-переменные. Для этого нужно использовать дополнительный символ $, например:

<?php 
  $my_ratio = 5;
?>
  {$$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).

Подробнее о Data Binding Expressions.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   _  __   ___   _____   __    ___ 
  | |/_/  / _ \ / ___/  / /   / _ |
 _>  <   / ___// /__   / /__ / __ |
/_/|_|  /_/    \___/  /____//_/ |_|
 
limb3/ru/packages/wact/expressions.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)