Add docs.

Create compile dir for tests
This commit is contained in:
Ivan Shalganov 2013-02-07 20:04:00 +04:00
parent e969f1b4fc
commit 1ad3d6533d
6 changed files with 152 additions and 18 deletions

View File

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

View File

@ -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);*/
}

View File

@ -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');