Данная страница предполагает, что Вам знакомы следующие понятия:
Выражения - это специальные конструкции шаблонной системы MACRO, которые имеют 2 основных назначения:
То есть применение выражений зависит от ситуации: если выражение стоит просто в шаблоне и не является атрибутом MACRO-тега, тогда это - аналог echo, то есть оно выводит значение выражения. Если же выражение является атрибутом MACRO-тега, то это по сути просто какое-то значение, используемое в операции конкатенации.
Выражения также позволяют применять к значениям специальные фильтры, то есть модифицировать значения.
Итак, выражения имеют общий вид: {$Expression[|filter1|filterN]}, где:
Выражения вида {$item.title} - это выражения, содержащие путь до переменной. MACRO разбивает такие выражения на составляющие и для каждого элемента путь генерит нечто вроде:
if((is_array($sub_var1) || $sub_var1 instanceof ArrayAccess) && isset($sub_var1[$stepN])) $sub_var2 = $sub_var1[$step2]; else $sub_var2 = "";
Где $sub_varN - какая-то временная переменная, а $stepN - очередной участок пути. При выполнении шаблона, если на каком-то участке дальше по цепочке идти будет невозможно ($sub_var[$stepN] не существует или $sub_var стала скаляром или объектом, не поддерживающим ArrayAccess), тогда получение данных по цепочке обрывается и будет выведено пустое значение.
MACRO-выражения также поддерживают вызовы методов или обращение к атрибутам объектов напрямую, например:
{$#some_object→someMethod()}
Ничего не мешает передать в метод любые параметры:
{$#some_object→someMethod(«aaa», $#foo)}
Обратите внимание, что $#foo - это аналог $this→foo. Преобразование $#foo в $this→foo MACRO делает автоматически.
При этом после вызова метода можно продолжать писать выражение, как обычно, например {$#book→getAuthor().full_name}, то в шаблоне условно будет иметь вид:
$temp_var = $this->book->getAuthor(); if((is_array($temp_var) || $temp_var instanceof ArrayAccess) && isset($temp_var['full_name'])) $sub_var = temp_var['full_name']; else $sub_var = "";
По-умолчанию, MACRO применяет фильтр html (функция htmlspecialchars()) для всех выражений, которые не содержат ни одного фильтра. Если применение html-фильтра в каком-то конкретном месте нежелательно, тогда используйте фильтр raw, который ничего не делает, а лишь отменяет применение html-фильтра по-умолчанию.
Итак, применение html-фильтра
Обсуждение