mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Improve cycle
Update docs
This commit is contained in:
parent
97e01e7f79
commit
d4d7b7d07b
@ -1,6 +1,8 @@
|
|||||||
Tag {capture}
|
Tag {capture}
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```smarty
|
```smarty
|
||||||
{capture $var}
|
{capture $var}
|
||||||
This content will be captured into variable $var
|
This content will be captured into variable $var
|
||||||
|
@ -1,27 +1,37 @@
|
|||||||
Tag {extends}
|
Tag {extends} [RU]
|
||||||
=============
|
==================
|
||||||
|
|
||||||
Тег {extends} реализует наследование шаблонов
|
Тег `{extends}` реализует наследование шаблонов, иерархия, обратная {include}. То есть шаблон сам выбирает своего родителя.
|
||||||
|
|
||||||
### {extends}
|
### {extends}
|
||||||
|
|
||||||
|
Родительский шаблон можно задать единожды и до объявления какого-либо блока.
|
||||||
|
|
||||||
```smarty
|
```smarty
|
||||||
{extends 'parent.tpl'}
|
{extends 'parent.tpl'}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Имя родительского шаблона может быть задан динамически, в этом случае производительность отрисовки может снизиться.
|
||||||
|
|
||||||
```smarty
|
```smarty
|
||||||
{extends $parent_tpl}
|
{extends $parent_tpl}
|
||||||
```
|
```
|
||||||
|
|
||||||
### {block}
|
### {block}
|
||||||
|
|
||||||
|
Блок указывает фрагмент шаблона, который будет передан родителю. Имя блока может быть задано как явно
|
||||||
|
|
||||||
```smarty
|
```smarty
|
||||||
{block bk1}content 1{/block}
|
{block bk1}content 1{/block}
|
||||||
|
...
|
||||||
{block 'bk2'}content 2{/block}
|
{block 'bk2'}content 2{/block}
|
||||||
|
```
|
||||||
|
|
||||||
|
так и не явно, но в данном случае пострадает производительность
|
||||||
|
|
||||||
|
```smarty
|
||||||
{block "bk{$number}"}content {$number}{/block}
|
{block "bk{$number}"}content {$number}{/block}
|
||||||
|
...
|
||||||
{if $condition}
|
{if $condition}
|
||||||
{block "bk-if"}content, then 'if' is true{/block}
|
{block "bk-if"}content, then 'if' is true{/block}
|
||||||
{else}
|
{else}
|
||||||
@ -31,10 +41,11 @@ Tag {extends}
|
|||||||
|
|
||||||
### {use}
|
### {use}
|
||||||
|
|
||||||
|
Что бы импортировать блоки из другого шаблона используйте тег {use}:
|
||||||
|
|
||||||
```smarty
|
```smarty
|
||||||
{use 'blocks.tpl'}
|
{use 'blocks.tpl'}
|
||||||
|
...
|
||||||
{if $theme.extended?}
|
{if $theme.extended?}
|
||||||
{use $theme.extended}
|
{use $theme.extended}
|
||||||
{/if}
|
{/if}
|
||||||
@ -53,3 +64,21 @@ Tag {extends}
|
|||||||
|
|
||||||
### Perfomance
|
### Perfomance
|
||||||
|
|
||||||
|
Алгоритм реализации наследования шаблонов может работать в разных режимах, в зависимости от условий.
|
||||||
|
Каждый режим имеет свою производительность.
|
||||||
|
|
||||||
|
1. **Максимальная** производительность:
|
||||||
|
* Имена шаблонов в теге {extends } заданы явно, без использования переменных и условий.
|
||||||
|
* Имена блоков заданы явно, без использования переменных, условий и не вложены ни в какой другой тег.
|
||||||
|
2. **Средняя** производительность:
|
||||||
|
* Имена шаблонов в теге {extends } заданы явно, без использования переменных и условий.
|
||||||
|
* Имена блоков заданы **не** явно, с использованием переменныч, условий или могут быть вложенные в другие теги.
|
||||||
|
3. **Низкая** производительность:
|
||||||
|
* Имена шаблонов в теге {extends } заданы **не** явно, с использованием переменных и условий.
|
||||||
|
* Имена блоков заданы явно, без использования переменных, условий и не вложены ни в какой другой тег.
|
||||||
|
4. **Минимальная** производительность:
|
||||||
|
* Имена шаблонов в теге {extends } заданы **не** явно, с использованием переменных и условий.
|
||||||
|
* Имена блоков заданы **не** явно, с использованием переменныч, условий или могут быть вложенные в другие теги.
|
||||||
|
|
||||||
|
Режим может идти только на понижение, при изменении условий во время прохождения по иерархии шаблонов.
|
||||||
|
При любом режиме работы не используется буферизация данных, то есть данные выводятся сразу.
|
@ -5,6 +5,6 @@ Tags {filter}
|
|||||||
|
|
||||||
```smarty
|
```smarty
|
||||||
{filter|strip_tags|truncate:20}
|
{filter|strip_tags|truncate:20}
|
||||||
Remove all HTML <b>tags</b> and truncate text to 20 symbols
|
Remove all HTML <b>tags</b> and truncate {$text} to 20 symbols
|
||||||
{/filter}
|
{/filter}
|
||||||
```
|
```
|
@ -1,5 +1,5 @@
|
|||||||
Tag {foreach}
|
Tag {foreach} [RU]
|
||||||
=============
|
==================
|
||||||
|
|
||||||
```smarty
|
```smarty
|
||||||
{foreach $list as [$key =>] $value [index=$index] [first=$first] [last=$last]}
|
{foreach $list as [$key =>] $value [index=$index] [first=$first] [last=$last]}
|
||||||
@ -81,6 +81,6 @@ Tag {foreach}
|
|||||||
|
|
||||||
В блоке `{foreachelse}...{/foreach}` использование `{break}`, `{continue}` выбросит исключение `Aspect\CompileException` при компиляции
|
В блоке `{foreachelse}...{/foreach}` использование `{break}`, `{continue}` выбросит исключение `Aspect\CompileException` при компиляции
|
||||||
|
|
||||||
### Perfomance
|
### Notice
|
||||||
|
|
||||||
Использование last замедляет работу цикла и требует от `$list` быть **countable**. Если есть возможность используйте **first** параметр.
|
Использование last требует от `$list` быть **countable**.
|
@ -1,5 +1,5 @@
|
|||||||
Tag {if}
|
Tag {if} [RU]
|
||||||
========
|
=============
|
||||||
|
|
||||||
Реализация оператора [if](http://docs.php.net/if) из PHP
|
Реализация оператора [if](http://docs.php.net/if) из PHP
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Tag {ignore}
|
Tag {ignore} [RU]
|
||||||
============
|
=================
|
||||||
|
|
||||||
Тег {ignore} позволяет отключить парсер на фрагмент шаблона, таким образом все фигурные скобки в блоке будут проигнорированы.
|
Тег {ignore} позволяет отключить парсер на фрагмент шаблона, таким образом все фигурные скобки в блоке будут проигнорированы.
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Tag {include}
|
Tag {include} [RU]
|
||||||
=============
|
==================
|
||||||
|
|
||||||
`{include}` tags are used for including other templates in the current template. Any variables available in the current template are also available within the included template.
|
`{include}` tags are used for including other templates in the current template. Any variables available in the current template are also available within the included template.
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Tag {var}
|
Tag {var} [RU]
|
||||||
=========
|
==============
|
||||||
|
|
||||||
Тег {var} предназначен для создания переменных в шаблонах.
|
Тег {var} предназначен для создания переменных в шаблонах.
|
||||||
|
|
||||||
|
@ -695,10 +695,15 @@ class Compiler {
|
|||||||
return __CLASS__.'::cycle((array)'.$exp.', '.$p["index"].');';
|
return __CLASS__.'::cycle((array)'.$exp.', '.$p["index"].');';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return __CLASS__.'::cycle((array)'.$exp.', isset($i) ? $i++ : ($i = 0) );';
|
$var = $tpl->tmpVar();
|
||||||
|
return "is_array($exp) ? ".__CLASS__.'::cycle('.$exp.", isset($var) ? $var++ : ($var = 0) ) : $exp";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function cycle($vals, $index) {
|
||||||
|
return $vals[$index % count($vals)];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Import macros from templates
|
* Import macros from templates
|
||||||
*
|
*
|
||||||
|
@ -202,6 +202,10 @@ class Template extends Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function tmpVar() {
|
||||||
|
return '$t'.($this->i++);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Append plain text to template body
|
* Append plain text to template body
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user