Изменения

Перейти к: навигация, поиск

Шаблонизатор VMX::Template

1686 байтов добавлено, 23:49, 13 января 2011
м
Нет описания правки
# Выполнение шаблона и получение результата:
# (возможно с передачей целого хеша данныхв шаблон)$page = $template->parse('имя_файла.tpl' [, array("ключ" => "значение", ...)]);
# Аналогично выполнение Выполнение именованного блока из файла:$page = $template->parseexec_from('имя_файла.tpl', 'имя_блока' [, array("ключ" => "значение", ...)]);
# Аналогично выполнение Выполнение кода из строки:$page = $template->parseparse_inline(NULL, 'код' [, array("ключ" => "значение", ...)]); # Выполнение именованного блока из кода (не рекомендуется, но возможно):$page = $template->exec_from_inline('код', 'имя_блока'] [, array("ключ" => "значение", ...)]);
# Очистка сохранённых данных для генерации ещё одной страницы:
# Выполнения полностью аналогичны PHP:
$page = $template->parse('имя_файла.tpl' [, { "ключ" => "значение", ... }]);$page = $template->exec_from('имя_файла.tpl', 'имя_блока'] [, { "ключ" => "значение", ... } ]);$page = $template->parseparse_inline('код'[, { "ключ" => "значение", ... }]);$page = $template->exec_from_inline('код' [, 'имя_блока'] [, { "ключ" => "значение", ... }]);
# Очистка сохранённых данных для генерации ещё одной страницы:
$template->clear;
* Подстановка — любое выражение, состоящее из переменных (<tt>a.b.0.c</tt>) и вызовов функций (<tt>eq(a.b.0.c, 'hello world')</tt>).
* Директивы — это FOR, IF, END и прочие, либо тоже выражение. Разница между выражением в директиве и выражением в подстановке проявляется, если маркеры подстановки заданы — в этом случае подстановки вычисляют выражение и подставляют результат в выходной поток, а директивы вычисляют выражение и никуда его не подставляют — игнорируют. Исключение из этого правила: функции подстановки (см. [[#INCLUDE=PROCESS=PARSEВключения|<tt><nowiki><!-- INCLUDE() --></nowiki></tt>Включения]] ) подставляется в выходной поток всегда, и чтобы игнорировать результат выполнения включения шаблона, нужно вызвать явно указать void <tt><nowiki><!-- void include(...) --></nowiki></tt>.
Путь к переменной теперь может включать в себя числа. Это будут обращения к элементам массивов, в то время как всё остальное — обращения к элементам хешей.
<!-- INCLUDE "another-file.tpl" --></pre>
По «динамическому» имени шаблона включение производится функцией <tt>[[#INCLUDE=PROCESS=PARSEВключения|INCLUDEфункциями включения]]</tt>. Как несложно заметить, вторая строка — как раз вызов функции.
=== Блоки ===
Вместо слова <tt>BLOCK</tt> можно также использовать слово <tt>FUNCTION</tt> или <tt>MACRO</tt>.
Вызывать блок из шаблона следует с помощью функции функций [[#INCLUDE=PROCESS=PARSEEXEC|PROCESSEXEC]], [[#EXEC_FROM|EXEC_FROM]]. Вызывать блок из кода следует, передавая после имени файла шаблона имя блокас помощью функций [[#EXEC_FROM_INLINE]]. СмТакже см. [[#Использование (PHP)]].
== Функции ==
 
Функции используются в выражениях как <tt>ФУНКЦИЯ(АРГУМЕНТ, АРГУМЕНТ, ...)</tt> или как <tt>ФУНКЦИЯ (пробел) ОДИН_АРГУМЕНТ</tt>. Вместо ", " можно также использовать «=>», например HASH(КЛЮЧ => ЗНАЧЕНИЕ, КЛЮЧ => ЗНАЧЕНИЕ). Синтаксической разницы между ", " и «=>» никакой нет.
{{note}} Первое, что обычно нужно — это S(), H(), T(), Q(), I(), то есть «фильтры» для различных преобразований строки:
Создание хэша из всех аргументов.
Соответственно в хеше аргументы идут парами КЛЮЧ, => ЗНАЧЕНИЕ, КЛЮЧ, => ЗНАЧЕНИЕ и т. п. (специального синтаксиса «=>» нет).
==== KEYS, HASH_KEYS, ARRAY_KEYS ====
Форматирование любой структуры данных в формат JSON.
==== INCLUDE=PROCESS=PARSE CALL ====
Включение другого шаблона или выполнение блокаВызов метода объекта по «динамическому» имени — <tt>call(varref, method_name, arg1, arg2, arg3, ...)</tt>.
<pre>process('имя файла')process('имя файла', 'имя блока')process('имя файла', 'имя блока', hash( аргументы ))process('::имя блока в текущем шаблоне' [, hash(аргументы)])</pre>==== MAP ====
Не рекомендуетсяПрименение функции, но возможно также имя которой передано как первый аргумент, ко всем переданным аргументам и элементам всех переданных массивов — map(«имя_функции», аргументы). === Включения === Сюда относятся функции выполнения других шаблонов и/или их блоков. Во все эти функции можно передавать код вместо имени файла«данные» (tpldata) либо с помощью создания хеша функцией hash(), либо просто передачей аргументов как <tt>КЛЮЧ => ЗНАЧЕНИЕ, ...</tt>. Также имеют особенность: результат этих функций подставляется даже при использовании в директивах. То есть, например, если маркеры директив <tt><nowiki><!-- --></nowiki></tt>, а подстановок <tt><nowiki>{ }</nowiki></tt>, то <tt><nowiki><!-- include(...) --></nowiki></tt> всё равно будет подставлено. Игнорировать результат нужно явно:<tt><nowiki><!-- void include(...) --></nowiki></tt>. ==== PARSE=INCLUDE=PROCESS ==== Включение другого шаблона.
<pre>
processparse('имя файла', )parse('код шаблонаимя файла' [, 'функция'] [, hash( аргументы ключ => значение, ... )])parse('имя файла', ключ => значение, ...)
</pre>
Имеет особенность: результат функции подставляется даже при использовании в директивах.==== PARSE_INLINE=INCLUDE_INLINE=PROCESS_INLINE ====
Т.е. например если маркеры директив <tt><nowiki><!-- --></nowiki></tt>Включение кода не из файла, а подстановок просто из строки — <tt><nowiki>{ }</nowiki></tt>parse_inline('код шаблона'[, то <tt><nowiki><!-- include(...аргументы]) --></nowiki></tt> всё равно будет подставлено. Игнорировать результат нужно явно: <tt><nowiki><!-- void include(...) --></nowiki></tt>.
==== CALL EXEC ====
Вызов метода объекта по «динамическому» имени — Включение блока из текущего шаблона — <tt>callexec(varref'имя блока'[, method_name, arg1, arg2, arg3, ...аргументы])</tt>.
==== MAP EXEC_FROM ====
Применение функцииВключение блока из другого шаблона — <tt>exec_from('имя файла', 'имя которой передано как первый аргументблока'[, ко всем переданным аргументам аргументы])</tt>. ==== EXEC_FROM_INLINE ==== Сие не рекомендуется, но можно вызывать и элементам всех переданных массивов — mapфункции из кода из строки — <tt>exec_from_inline(«имя_функции»'код шаблона', 'имя блока'[, аргументы])</tt>.
[[Категория:Sway]]

Навигация