Мы предполагаем, что вам уже знакомы материалы следующих разделов:
То есть вам должны быть знакомо следующее:
Теги хранятся в файлах с именем 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 { [...] } ?>
Полный список аннотация для тегов:
То, какие методы перекрывать, зависит от типа создаваемого тега:
Если это будет обычный тег (не имеющий html-аналога), тогда вы скорее всего будете наследоваться от WactCompilerTag или WactRuntimeComponentTag и вам лучше всего перекрывать следующие методы:
Если вы создаете тег-контекст, когда вы скорее всего будете наследоваться от WactRuntimeDatasourceComponentTag. Будьте внимательны - метод generateBeforeContent($code_writer) уже перекрыт.
Если вы создаете тег, у которого есть html-аналог, тогда скорее всего вам будет удобнее отнаследоваться от WactRuntimeComponentHTMLTag или WactRuntimeDatasourceComponentHTMLTag и перекрывать методы:
Начиная с версии 0.5 если вы желаете поддерживать динамические атрибуты в тегах, то вам нужно лишь в нужном месте вызвать у этого атрибута метод generateExpression($code_writer). Пример - это атрибут from тега <list:list>, о котором рассказано на странице "Как работает компилятор WACT-шаблонов". Все действия, связанные с подготовкой (так называемая прегенерация), находится к классе WactCompilerTag. Именно поэтому при создании дочерних классов от класса WactCompilerTag рекомендуется перекрывать методы generateBeforeContent($code_writer) и generateAfterContent($code_writer) (в некоторых случаях - generateTagContent($code_writer)), но не generate($code_writer).