fenom/docs/en/tags/extends.md

3.8 KiB
Raw Blame History

Tag {extends} [RU]

Тег {extends} реализует наследование шаблонов, иерархия, обратная {include}. То есть шаблон сам выбирает своего родителя.

{extends}

Родительский шаблон можно задать единожды и до объявления какого-либо блока.

{extends 'parent.tpl'}

Имя родительского шаблона может быть задан динамически, в этом случае производительность отрисовки может снизиться.

{extends $parent_tpl}

{block}

Блок указывает фрагмент шаблона, который будет передан родителю. Имя блока может быть задано как явно

{block bk1}content 1{/block}
...
{block 'bk2'}content 2{/block}

так и не явно, но в данном случае пострадает производительность

{block "bk{$number}"}content {$number}{/block}
...
{if $condition}
    {block "bk-if"}content, then 'if' is true{/block}
{else}
    {block "bk{$fail}"}content, then 'if' is false{/block}
{/if}

{use}

Что бы импортировать блоки из другого шаблона используйте тег {use}:

{use 'blocks.tpl'}

{parent}

Planned. Not supported yet. Feature #5.

{block 'block1'}
  content ...
  {parent}
  content ...
{/block}

Performance

Алгоритм реализации наследования шаблонов может работать в разных режимах, в зависимости от условий. Каждый режим имеет свою производительность.

  1. Максимальная производительность:
    • Имена шаблонов в теге {extends } заданы явно, без использования переменных и условий.
    • Имена блоков заданы явно, без использования переменных, условий и не вложены ни в какой другой тег.
  2. Средняя производительность:
    • Имена шаблонов в теге {extends } заданы явно, без использования переменных и условий.
    • Имена блоков заданы не явно, с использованием переменныч, условий или могут быть вложенные в другие теги.
  3. Низкая производительность:
    • Имена шаблонов в теге {extends } заданы не явно, с использованием переменных и условий.
    • Имена блоков заданы явно, без использования переменных, условий и не вложены ни в какой другой тег.
  4. Минимальная производительность:
    • Имена шаблонов в теге {extends } заданы не явно, с использованием переменных и условий.
    • Имена блоков заданы не явно, с использованием переменных, условий или могут быть вложенные в другие теги.

Режим может идти только на понижение, при изменении условий во время прохождения по иерархии шаблонов. При любом режиме работы не используется буферизация данных, то есть данные выводятся сразу.