2013-03-15 00:57:28 +04:00
|
|
|
|
Tag {extends} [RU]
|
|
|
|
|
==================
|
2013-02-15 12:17:23 +04:00
|
|
|
|
|
2013-03-15 00:57:28 +04:00
|
|
|
|
Тег `{extends}` реализует наследование шаблонов, иерархия, обратная {include}. То есть шаблон сам выбирает своего родителя.
|
2013-02-15 12:17:23 +04:00
|
|
|
|
|
|
|
|
|
### {extends}
|
|
|
|
|
|
2013-03-15 00:57:28 +04:00
|
|
|
|
Родительский шаблон можно задать единожды и до объявления какого-либо блока.
|
|
|
|
|
|
2013-02-19 09:51:33 +04:00
|
|
|
|
```smarty
|
|
|
|
|
{extends 'parent.tpl'}
|
|
|
|
|
```
|
|
|
|
|
|
2013-03-15 00:57:28 +04:00
|
|
|
|
Имя родительского шаблона может быть задан динамически, в этом случае производительность отрисовки может снизиться.
|
|
|
|
|
|
2013-02-19 09:51:33 +04:00
|
|
|
|
```smarty
|
|
|
|
|
{extends $parent_tpl}
|
|
|
|
|
```
|
|
|
|
|
|
2013-02-15 12:17:23 +04:00
|
|
|
|
### {block}
|
|
|
|
|
|
2013-03-15 00:57:28 +04:00
|
|
|
|
Блок указывает фрагмент шаблона, который будет передан родителю. Имя блока может быть задано как явно
|
|
|
|
|
|
2013-02-19 09:51:33 +04:00
|
|
|
|
```smarty
|
|
|
|
|
{block bk1}content 1{/block}
|
2013-03-15 00:57:28 +04:00
|
|
|
|
...
|
2013-02-19 09:51:33 +04:00
|
|
|
|
{block 'bk2'}content 2{/block}
|
2013-03-15 00:57:28 +04:00
|
|
|
|
```
|
2013-02-19 09:51:33 +04:00
|
|
|
|
|
2013-03-15 00:57:28 +04:00
|
|
|
|
так и не явно, но в данном случае пострадает производительность
|
2013-02-19 09:51:33 +04:00
|
|
|
|
|
2013-03-15 00:57:28 +04:00
|
|
|
|
```smarty
|
|
|
|
|
{block "bk{$number}"}content {$number}{/block}
|
|
|
|
|
...
|
2013-02-19 09:51:33 +04:00
|
|
|
|
{if $condition}
|
|
|
|
|
{block "bk-if"}content, then 'if' is true{/block}
|
|
|
|
|
{else}
|
|
|
|
|
{block "bk{$fail}"}content, then 'if' is false{/block}
|
|
|
|
|
{/if}
|
|
|
|
|
```
|
2013-02-15 12:17:23 +04:00
|
|
|
|
|
|
|
|
|
### {use}
|
|
|
|
|
|
2013-03-15 00:57:28 +04:00
|
|
|
|
Что бы импортировать блоки из другого шаблона используйте тег {use}:
|
2013-02-15 12:17:23 +04:00
|
|
|
|
|
2013-02-19 09:51:33 +04:00
|
|
|
|
```smarty
|
|
|
|
|
{use 'blocks.tpl'}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
2013-02-15 12:17:23 +04:00
|
|
|
|
### {parent}
|
|
|
|
|
|
2013-07-04 01:31:47 +04:00
|
|
|
|
Planned. Not supported yet. Feature #5.
|
2013-06-08 00:08:00 +04:00
|
|
|
|
|
2013-02-19 09:51:33 +04:00
|
|
|
|
```smarty
|
|
|
|
|
{block 'block1'}
|
|
|
|
|
content ...
|
|
|
|
|
{parent}
|
|
|
|
|
content ...
|
|
|
|
|
{/block}
|
|
|
|
|
```
|
2013-02-15 12:17:23 +04:00
|
|
|
|
|
2013-02-19 09:51:33 +04:00
|
|
|
|
### Perfomance
|
2013-02-15 12:17:23 +04:00
|
|
|
|
|
2013-03-15 00:57:28 +04:00
|
|
|
|
Алгоритм реализации наследования шаблонов может работать в разных режимах, в зависимости от условий.
|
|
|
|
|
Каждый режим имеет свою производительность.
|
|
|
|
|
|
|
|
|
|
1. **Максимальная** производительность:
|
|
|
|
|
* Имена шаблонов в теге {extends } заданы явно, без использования переменных и условий.
|
|
|
|
|
* Имена блоков заданы явно, без использования переменных, условий и не вложены ни в какой другой тег.
|
|
|
|
|
2. **Средняя** производительность:
|
|
|
|
|
* Имена шаблонов в теге {extends } заданы явно, без использования переменных и условий.
|
|
|
|
|
* Имена блоков заданы **не** явно, с использованием переменныч, условий или могут быть вложенные в другие теги.
|
|
|
|
|
3. **Низкая** производительность:
|
|
|
|
|
* Имена шаблонов в теге {extends } заданы **не** явно, с использованием переменных и условий.
|
|
|
|
|
* Имена блоков заданы явно, без использования переменных, условий и не вложены ни в какой другой тег.
|
|
|
|
|
4. **Минимальная** производительность:
|
|
|
|
|
* Имена шаблонов в теге {extends } заданы **не** явно, с использованием переменных и условий.
|
2013-05-30 20:00:52 +04:00
|
|
|
|
* Имена блоков заданы **не** явно, с использованием переменных, условий или могут быть вложенные в другие теги.
|
2013-03-15 00:57:28 +04:00
|
|
|
|
|
|
|
|
|
Режим может идти только на понижение, при изменении условий во время прохождения по иерархии шаблонов.
|
2013-07-04 01:31:47 +04:00
|
|
|
|
При любом режиме работы не используется буферизация данных, то есть данные выводятся сразу.
|