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

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


limb3_2007_2:ru:usage:wact:how_to_create_new_tag

Создание собственных WACT тегов

Мы предполагаем, что вам уже знакомы материалы следующих разделов:

То есть вам должны быть знакомо следующее:

  • какие типы тегов существуют, и от какого класса нужно отнаследоваться в том или ином случае.
  • что такое code_writer, и какие наиболее часто используемые методы у него есть.
  • какие методы есть в классе WactCompilerTreeNode, вызываемый в процессе компиляции шаблона.

Теги хранятся в файлах с именем some_tag_name.tag.php, который должен быть расположен в одной из директорий вида src/template/tags (при использовании WEB_APP пакета). Обратите внимание на окончание .tag.php.

Аннотации тегов

Перед самой декларацией класса тега существует зона комментариев в стиле phpDoc - это зона аннотаций тега, например:

<?php
/**
 * Include another template into the current template
 * @tag core:INCLUDE
 * @req_const_attributes file
 * @forbid_end_tag
 */
class WactCoreIncludeTag extends WactCompilerTag
{
[...]
}
?>

Полный список аннотация для тегов:

  • tag - название тега, которое может использовать внутри шаблона. Регистр не имеет значения. Начиная с версии WACT 0.3 поддерживаются алиасы, то есть можно указывать несколько названий тегов через запятую, например: @tag params,param.
  • req_attributes - список атрибутов тега, которые должны обязательно присутствовать в шаблоне.
  • req_const_attributes - список атрибутов тега, которые должны иметь константные значения.
  • suppress_attributes - список атрибутов тега, которые не должны показываться после рендеринга тега на этапе выполнения шаблона. Другими словами это список атрибутов только для этапа компиляции. Данная аннотация актуальна только для тегов класса WactRuntimeComponentHTMLTag и его дочерних.
  • forbid_parsing - указывает нужно ли обрабатывать компилятором содержимое внутри тега. Используется, например, у тега <core:literal>, где имеет значение true. По-умолчанию равно false.
  • parent_tag_class - указывает название класса родительского тега, внутри которого обязан находиться. Если эта аннотация указана, а родительский тег не найден - будет сгенерирована ошибка компиляции.
  • restrict_self_nesting - запрещает тегу иметь в качестве непосредственного родителя аналогичный тег.
  • forbid_end_tag - запрещает тег иметь открывающий и закрывающий тег. То есть для данных тегов доступна только короткая форма, например, <find:params />.
  • runat - указывает, должен ли тег компилироваться как WACT-тег. По-умолчанию равно server и обычно не указывается Эта аннтация актуальна для тегов класса WactRuntimeComponentHTMLTag, таких как <input>, <form>, где стоит client. Это значит, что тег будет интерпретироваться как обычный htlm-тег до тех пор не будет явно указана необходимость компиляции, например, <form runat='server'>
  • runat_as - указывает имя класса тега, который нужно найти среди родительских тегов и посмотреть его значение runat. Актуально для тегов форм, таких как <input>, которые наследуют значение runat от тега класса WactFormTag.

Методы, которые можно перекрывать

Список методов класса WactCompilerTreeNode, которые обычно перекрывают в тегах:

  • preParse($compiler) - вызывается непосредственно после нахождения тега в шаблоне. В качестве параметров получает объект самого WACT компилятора класса WactCompiler. Обычно необходимость перекрытия данного метода возникает редко. В качестве примера можно посмотреть тег <core:include> (limb/wact/src/tags/core/include.file.php).
  • generateConstructor($code_writer) - должен генерить php-код, создающий активный компонент фазы компиляции. По-умолчанию метод реализован так, чтобы делегировать своим дочерним элементам.
  • generateContents($code_writer) - непосредственная генерация кода тега шаблона. Здесь производится вызов метода generate($code_writer) всех дочерних элементов, которые относятся к текущему элементу дерева.
  • preGenerate($code_writer) - код, который должен выполниться до генерации тела тега. Обычно сюда помещают генерацию кода, который подготавливает какое-либо состояние.
  • postGenerate($code_writer) - код, который должен выполниться после основной генерации кода тега.

Обсуждение

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