Мы предполагаем, что вам уже знакомы материалы следующих разделов:
Теги хранятся в файлах с именем some_tag_name.tag.php, который должен быть расположен в одной из директорий вида src/macro пакетов или приложения, а также в папке /limb/macro/src/tags. Обратите внимание на окончание .tag.php - только их таких файлов информацию попадает в словарь тегов.
Перед самой декларацией класса тега существует зона комментариев в стиле phpDoc - это зона аннотаций тега, например:
<?php /** * @tag tag_name * @aliases alias1, alias2 * @req_attributes param1, param2 * @parent_tag_class parent_tag_class * @restrict_self_nesting * @forbid_end_tag */ class lmbMacroApplyTag extends lmbMacroTag { [...] } ?>
Полный список аннотация для тегов:
При использовании данного тега необходимо определить 2 атрибута:
Это определение можно сделать также в методе preParse(lmbMacroCompiler $compiler) (см. пример limb/macro/src/tags/form/input.tag.php)
lmbMacroRuntimeWidgetTag использует метод lmbMacroCodeWriter :: writeToInit($php_code), который используется для записи инициализирующего кода в генерируемый шаблон. lmbMacroRuntimeWidgetTag создает объект, как атрибут генерируемого класса с именем, которое можно получить при помощи метода getRuntimeVar(). getRuntimeVar() - возвращает кусок php-кода, который ссылается на объект widget-а, обычно это что-то вроде $this→tag_tag_id.
lmbMacroRuntimeWidgetHtmlTag требует также указания атрибута $html_tag.
Примеры - это большинство тегов в папке limb/macro/src/tags/form/
То, какие методы перекрывать, зависит от типа создаваемого тега:
Если это будет обычный тег (не имеющий html-аналога), тогда вы скорее всего будете наследоваться от lmbMacroTag или lmbMacroRuntimeWidgetTag и вам лучше всего перекрывать следующие методы:
Главное, не забудьте вызвать родительский _generateContent($code_writer), так как именно в нем передается управление дочерним элементам.
Если вы создаете тег, у которого есть html-аналог, тогда скорее всего вам будет удобнее отнаследоваться от lmbMacroRuntimeWidgetHtmlTag или даже lmbMacroFormElementTag и перекрывать методы:
В принципе, можно в последнем случае также перекрывать метод _generateContent($code_writer).
Этот метод используется для предварительного анализа атрибутов тега, родительских элементов и т.д. Этот метод вызывается в тот самый момент, когда компилятор находит соответствующий тег в MACRO-шаблоне. Обычно этот метод используется для установки каких-то обязательных атрибутов до момента их автоматических проверок на более поздних этапах.
см. примеры: {{input}}, {{insert}} и нек. другие.
Обсуждение