====== Создание собственных WACT тегов ======
Мы предполагаем, что вам уже знакомы материалы следующих разделов:
* [[limb3:ru:packages:wact:compiler|"Как работает компилятор WACT-шаблонов"]],
* [[limb3:ru:packages:wact:tag_types|"Типы тегов"]]
То есть вам должны быть знакомо следующее:
* какие типы тегов существуют, и от какого класса нужно отнаследоваться в том или ином случае.
* что такое code_writer, и какие наиболее часто используемые методы у него есть.
* какие методы есть в классе WactCompilerTreeNode, вызываемый в процессе компиляции шаблона.
Теги хранятся в файлах с именем some_tag_name.tag.php, который должен быть расположен в одной из директорий вида src/template/tags (при использовании WEB_APP пакета). Обратите внимание на окончание .tag.php.
===== Аннотации тегов =====
Перед самой декларацией класса тега существует зона комментариев в стиле phpDoc - это зона аннотаций тега, например:
Полный список аннотация для тегов:
* **tag** - название тега, которое может использовать внутри шаблона. Регистр не имеет значения. Начиная с версии WACT 0.3 поддерживаются алиасы, то есть можно указывать несколько названий тегов через запятую, например: @tag params,param.
* **req_attributes** - список атрибутов тега, которые должны обязательно присутствовать в шаблоне.
* **req_const_attributes** - список атрибутов тега, которые должны иметь константные значения.
* **suppress_attributes** - список атрибутов тега, которые не должны показываться после рендеринга тега на этапе выполнения шаблона. Другими словами это список атрибутов только для этапа компиляции. Данная аннотация актуальна только для тегов класса WactRuntimeComponentHTMLTag и его дочерних.
* **forbid_parsing** - указывает нужно ли обрабатывать компилятором содержимое внутри тега. Используется, например, у тега , где имеет значение true. По-умолчанию равно false.
* **parent_tag_class** - указывает название класса родительского тега, внутри которого обязан находиться. Если эта аннотация указана, а родительский тег не найден - будет сгенерирована ошибка компиляции.
* **restrict_self_nesting** - запрещает тегу иметь в качестве непосредственного родителя аналогичный тег.
* **forbid_end_tag** - запрещает тег иметь открывающий и закрывающий тег. То есть для данных тегов доступна только короткая форма, например, .
* **runat** - указывает, должен ли тег компилироваться как WACT-тег. По-умолчанию равно server и обычно не указывается Эта аннтация актуальна для тегов класса WactRuntimeComponentHTMLTag, таких как ,