Improve cycle

Update docs
This commit is contained in:
bzick 2013-03-15 00:57:28 +04:00
parent 97e01e7f79
commit d4d7b7d07b
10 changed files with 60 additions and 20 deletions

View File

@ -1,6 +1,8 @@
Tag {capture}
=============
```smarty
{capture $var}
This content will be captured into variable $var

View File

@ -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 } заданы **не** явно, с использованием переменных и условий.
* Имена блоков заданы **не** явно, с использованием переменныч, условий или могут быть вложенные в другие теги.
Режим может идти только на понижение, при изменении условий во время прохождения по иерархии шаблонов.
При любом режиме работы не используется буферизация данных, то есть данные выводятся сразу.

View File

@ -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}
```

View File

@ -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**.

View File

@ -1,5 +1,5 @@
Tag {if}
========
Tag {if} [RU]
=============
Реализация оператора [if](http://docs.php.net/if) из PHP

View File

@ -1,5 +1,5 @@
Tag {ignore}
============
Tag {ignore} [RU]
=================
Тег {ignore} позволяет отключить парсер на фрагмент шаблона, таким образом все фигурные скобки в блоке будут проигнорированы.

View File

@ -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.

View File

@ -1,5 +1,5 @@
Tag {var}
=========
Tag {var} [RU]
==============
Тег {var} предназначен для создания переменных в шаблонах.

View File

@ -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
*

View File

@ -202,6 +202,10 @@ class Template extends Render {
}
}
public function tmpVar() {
return '$t'.($this->i++);
}
/**
* Append plain text to template body
*