mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Add docs.
Create compile dir for tests
This commit is contained in:
parent
e969f1b4fc
commit
1ad3d6533d
@ -1,6 +1,8 @@
|
||||
Aspect PHP Template Engine
|
||||
==========================
|
||||
|
||||
> Composer package: n/a
|
||||
|
||||
## [About](./docs/about.md) | [Documentation](./docs/main.md) | [Benchmark](./docs/benchmark.md) | [Bugs](https://github.com/bzick/aspect/issues) | [Articles](./docs/articles.md)
|
||||
|
||||
[![Build Status](https://travis-ci.org/bzick/aspect.png?branch=master)](https://travis-ci.org/bzick/aspect)
|
||||
|
39
docs/tags/for.md
Normal file
39
docs/tags/for.md
Normal file
@ -0,0 +1,39 @@
|
||||
Tag {for}
|
||||
=========
|
||||
|
||||
### {for}
|
||||
|
||||
{for $counter=<start> to=<end>[ step=<step>][ index=$index][ first=$first][ last=$last]}
|
||||
{* ...code... *}
|
||||
{break}
|
||||
{* ...code... *}
|
||||
{continue}
|
||||
{* ...code... *}
|
||||
{forelse}
|
||||
{* ...code... *}
|
||||
{/for}
|
||||
|
||||
Переменная $counter принимает значение <start> и увеличивает своё значение на <step> на каждой итерации цикла пока не достигнет или не станет больше <end>.
|
||||
<step> является необязательным аргументом. Если не указан, считается равным единице.
|
||||
$index имеет значение номера текущей итерации. Первая итерация имеет номер 0.
|
||||
$first равно TRUE, если итерация первая.
|
||||
$last равно TRUE, если итерация последняя.
|
||||
|
||||
Поля <start>, <end>, <step> могут быть числами, или переменными, значение которых приводится к числовому.
|
||||
|
||||
Значением параметров index, first, last может быть только переменная (допускаются вложенности на подобии $a.b.c, но массив $a.b должен быть объявлен).
|
||||
|
||||
|
||||
### {break}
|
||||
|
||||
Тег `{break}` используется для выхода из цикла до достижения последней итерации. Если в цикле встречается тег {break}, цикл завершает свою работу, и далее выполняется код, следующий сразу за блоком цикла
|
||||
|
||||
|
||||
### {continue}
|
||||
|
||||
Тег `{continue}` используется для прерывания текущей итерации. Если в цикле встречается тег {continue}, часть цикла, следующая после тега, не выполняется, и начинается следующая итерация. Если текущая итерация была последней, цикл завершается.
|
||||
|
||||
|
||||
### {forelse}
|
||||
|
||||
Тег `{forelse}` ограничивает код, который должен быть выполнен, если сочетание полей <start>, <end> и <step> не обеспечивают ни одной итерации.
|
73
docs/tags/foreach.md
Normal file
73
docs/tags/foreach.md
Normal file
@ -0,0 +1,73 @@
|
||||
Tag {foreach}
|
||||
=============
|
||||
|
||||
Перебор значений массива или итератора
|
||||
|
||||
### {foreach}
|
||||
|
||||
Перебор значений массива $list
|
||||
|
||||
```smaert
|
||||
{foreach $list as $value}
|
||||
<div>{$value}</div>
|
||||
{/foreach}
|
||||
```
|
||||
|
||||
Перебор ключей и значений массива $list
|
||||
|
||||
```smarty
|
||||
{foreach $list as $key => $value}
|
||||
<div>{$key}: {$value}</div>
|
||||
{/foreach}
|
||||
```
|
||||
|
||||
Получение номера (индекса) итерации
|
||||
|
||||
```smarty
|
||||
{foreach $list as $value index=$index}
|
||||
<div>№{$index}: {$value}</div>
|
||||
{/foreach}
|
||||
```
|
||||
|
||||
Определение первого элемента
|
||||
|
||||
```smarty
|
||||
{foreach $list as $value first=$first}
|
||||
<div>{if $first} first item {/if} {$value}</div>
|
||||
{/foreach}
|
||||
```
|
||||
|
||||
Переменная `$first` будет иметь значение **TRUE**, если текущая итерация является первой.
|
||||
Определение последнего элемента
|
||||
|
||||
```smarty
|
||||
{foreach $list as $value last=$last}
|
||||
<div>{if $last} last item {/if} {$value}</div>
|
||||
{/foreach}
|
||||
```
|
||||
|
||||
Переменная `$last` будет иметь значение **TRUE**, если текущая итерация является последней.
|
||||
Использование last замедляет работу цикла и требует от `$list` быть **countable**. Если есть возможность используйте **first** параметр.
|
||||
|
||||
### {break}
|
||||
|
||||
Тег `{break}` используется для выхода из цикла до достижения последней итерации. Если в цикле встречается тег `{break}`, цикл завершает свою работу, и далее, выполняется код, следующий сразу за блоком цикла
|
||||
|
||||
### {continue}
|
||||
|
||||
Тег `{continue}` используется для прерывания текущей итерации. Если в цикле встречается тег `{continue}`, часть цикла, следующая после тега, не выполняется, и начинается следующая итерация. Если текущая итерация была последней, цикл завершается.
|
||||
|
||||
### {foreachelse}
|
||||
|
||||
Тег {foreachelse} ограничивает код, который должен быть выполнен, если итерируемый объект пуст.
|
||||
|
||||
```smarty
|
||||
{var $list = []}
|
||||
{foreach $list as $value}
|
||||
<div>{if $last} last item {/if} {$value}</div>
|
||||
{foreachelse}
|
||||
<div>empty</div>
|
||||
{/foreach}
|
||||
```
|
||||
|
||||
В блоке `{foreachelse}...{/foreach}` использование `{break}`, `{continue}` выбросит исключение `Aspect\CompileException` при компиляции
|
36
docs/tags/var.md
Normal file
36
docs/tags/var.md
Normal file
@ -0,0 +1,36 @@
|
||||
Tag {var}
|
||||
=========
|
||||
|
||||
Тег {var} предназначен для создания переменных в шаблонах.
|
||||
|
||||
```smarty
|
||||
{var $var=EXPR}
|
||||
```
|
||||
|
||||
К названию новой переменной предъявляются те же требования, что и к [именам переменных](http://www.php.net/manual/en/language.variables.basics.php) в PHP.
|
||||
Выражение EXPR подразумевает любое поддерживаемое выражение.
|
||||
|
||||
```smarty
|
||||
{var $v = 5}
|
||||
{var $v = "value"}
|
||||
|
||||
{var $v = $x+$y}
|
||||
{var $v = $z++}
|
||||
{var $v = $z++ + 1}
|
||||
{var $v = --$z}
|
||||
{var $v = $y/$x}
|
||||
{var $v = $y-$x}
|
||||
{var $v = $y*$x-2}
|
||||
{var $v = ($y^$x)+7}
|
||||
|
||||
// Присваивание массивов
|
||||
|
||||
{var $v = [1,2,3]}
|
||||
{var $v = []}
|
||||
{var $v = ["one"|upper => 1, 4 => $x, "three" => 3]}
|
||||
{var $v = ["key1" => $y*$x-2, "key2" => ["z" => $z]]}
|
||||
|
||||
// Присваивание результата выполнения функции
|
||||
|
||||
{var $v = count([1,2,3])+7}
|
||||
```
|
@ -10,30 +10,13 @@ class TemplateTest extends \PHPUnit_Framework_TestCase {
|
||||
*/
|
||||
public static $aspect;
|
||||
|
||||
public function _testSandbox() {
|
||||
//self::$aspect->storeTemplate(self::$aspect->compileCode("<b>Welcome, {block username}{/block} ({block name='email'}{/block})</b>", "parent.tpl"));
|
||||
/*self::$aspect->storeTemplate(new Render("parent.tpl", function () {
|
||||
echo "<b>Welcome, {block name='username'}{/block} ({block name='usermail'}{/block})</b>";
|
||||
}));*/
|
||||
try {
|
||||
|
||||
} catch(\Exception $e) {
|
||||
echo $e->getTraceAsString();
|
||||
drop($e->getMessage(), $e->getFile().":".$e->getLine());
|
||||
}
|
||||
}
|
||||
|
||||
public function setUp() {
|
||||
exec("rm -f ".ASPECT_RESOURCES.'/compile/*');
|
||||
mkdir(ASPECT_RESOURCES.'/compile', 0777, true);
|
||||
self::$aspect = Aspect::factory(ASPECT_RESOURCES.'/template', ASPECT_RESOURCES.'/compile');
|
||||
self::$aspect->addTemplate(new Render("welcome.tpl", function ($tpl) {
|
||||
echo "<b>Welcome, ".$tpl["username"]." (".$tpl["email"].")</b>";
|
||||
}, array()));
|
||||
/*$parent = self::$aspect->compileCode('Parent template block1: {block name="bk1"}{/block}
|
||||
block2: {block "bk2"} default block 2{/block}
|
||||
{var $bk="bk3"}
|
||||
block3: {block "$bk"} default block 3{/block} ', "parent.tpl");
|
||||
self::$aspect->addTemplate($parent);*/
|
||||
}
|
||||
|
||||
|
||||
|
@ -15,6 +15,7 @@ class AspectTest extends \PHPUnit_Framework_TestCase {
|
||||
}
|
||||
|
||||
public function setUp() {
|
||||
mkdir(ASPECT_RESOURCES.'/compile', 0777, true);
|
||||
self::tearDownAfterClass();
|
||||
$this->aspect = $aspect = Aspect::factory(ASPECT_RESOURCES.'/template', ASPECT_RESOURCES.'/compile');
|
||||
$aspect->setCompileDir(ASPECT_RESOURCES.'/compile');
|
||||
|
Loading…
Reference in New Issue
Block a user