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}
|
||||
=============
|
||||
|
||||
|
||||
|
||||
```smarty
|
||||
{capture $var}
|
||||
This content will be captured into variable $var
|
||||
|
@ -1,27 +1,37 @@
|
||||
Tag {extends}
|
||||
=============
|
||||
Tag {extends} [RU]
|
||||
==================
|
||||
|
||||
Тег {extends} реализует наследование шаблонов
|
||||
Тег `{extends}` реализует наследование шаблонов, иерархия, обратная {include}. То есть шаблон сам выбирает своего родителя.
|
||||
|
||||
### {extends}
|
||||
|
||||
Родительский шаблон можно задать единожды и до объявления какого-либо блока.
|
||||
|
||||
```smarty
|
||||
{extends 'parent.tpl'}
|
||||
```
|
||||
|
||||
Имя родительского шаблона может быть задан динамически, в этом случае производительность отрисовки может снизиться.
|
||||
|
||||
```smarty
|
||||
{extends $parent_tpl}
|
||||
```
|
||||
|
||||
### {block}
|
||||
|
||||
Блок указывает фрагмент шаблона, который будет передан родителю. Имя блока может быть задано как явно
|
||||
|
||||
```smarty
|
||||
{block bk1}content 1{/block}
|
||||
|
||||
...
|
||||
{block 'bk2'}content 2{/block}
|
||||
```
|
||||
|
||||
так и не явно, но в данном случае пострадает производительность
|
||||
|
||||
```smarty
|
||||
{block "bk{$number}"}content {$number}{/block}
|
||||
|
||||
...
|
||||
{if $condition}
|
||||
{block "bk-if"}content, then 'if' is true{/block}
|
||||
{else}
|
||||
@ -31,10 +41,11 @@ Tag {extends}
|
||||
|
||||
### {use}
|
||||
|
||||
Что бы импортировать блоки из другого шаблона используйте тег {use}:
|
||||
|
||||
```smarty
|
||||
{use 'blocks.tpl'}
|
||||
|
||||
...
|
||||
{if $theme.extended?}
|
||||
{use $theme.extended}
|
||||
{/if}
|
||||
@ -53,3 +64,21 @@ Tag {extends}
|
||||
|
||||
### Perfomance
|
||||
|
||||
Алгоритм реализации наследования шаблонов может работать в разных режимах, в зависимости от условий.
|
||||
Каждый режим имеет свою производительность.
|
||||
|
||||
1. **Максимальная** производительность:
|
||||
* Имена шаблонов в теге {extends } заданы явно, без использования переменных и условий.
|
||||
* Имена блоков заданы явно, без использования переменных, условий и не вложены ни в какой другой тег.
|
||||
2. **Средняя** производительность:
|
||||
* Имена шаблонов в теге {extends } заданы явно, без использования переменных и условий.
|
||||
* Имена блоков заданы **не** явно, с использованием переменныч, условий или могут быть вложенные в другие теги.
|
||||
3. **Низкая** производительность:
|
||||
* Имена шаблонов в теге {extends } заданы **не** явно, с использованием переменных и условий.
|
||||
* Имена блоков заданы явно, без использования переменных, условий и не вложены ни в какой другой тег.
|
||||
4. **Минимальная** производительность:
|
||||
* Имена шаблонов в теге {extends } заданы **не** явно, с использованием переменных и условий.
|
||||
* Имена блоков заданы **не** явно, с использованием переменныч, условий или могут быть вложенные в другие теги.
|
||||
|
||||
Режим может идти только на понижение, при изменении условий во время прохождения по иерархии шаблонов.
|
||||
При любом режиме работы не используется буферизация данных, то есть данные выводятся сразу.
|
@ -5,6 +5,6 @@ Tags {filter}
|
||||
|
||||
```smarty
|
||||
{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}
|
||||
```
|
@ -1,5 +1,5 @@
|
||||
Tag {foreach}
|
||||
=============
|
||||
Tag {foreach} [RU]
|
||||
==================
|
||||
|
||||
```smarty
|
||||
{foreach $list as [$key =>] $value [index=$index] [first=$first] [last=$last]}
|
||||
@ -81,6 +81,6 @@ Tag {foreach}
|
||||
|
||||
В блоке `{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
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
Tag {ignore}
|
||||
============
|
||||
Tag {ignore} [RU]
|
||||
=================
|
||||
|
||||
Тег {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.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
Tag {var}
|
||||
=========
|
||||
Tag {var} [RU]
|
||||
==============
|
||||
|
||||
Тег {var} предназначен для создания переменных в шаблонах.
|
||||
|
||||
|
@ -695,10 +695,15 @@ class Compiler {
|
||||
return __CLASS__.'::cycle((array)'.$exp.', '.$p["index"].');';
|
||||
}
|
||||
} 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
|
||||
*
|
||||
|
@ -202,6 +202,10 @@ class Template extends Render {
|
||||
}
|
||||
}
|
||||
|
||||
public function tmpVar() {
|
||||
return '$t'.($this->i++);
|
||||
}
|
||||
|
||||
/**
|
||||
* Append plain text to template body
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user