Merge pull request #184 from fenom-template/master

sync develop
This commit is contained in:
Ivan Shalganov 2015-08-13 00:13:28 +03:00
commit d596c81b4c
5 changed files with 36 additions and 17 deletions

View File

@ -1,5 +1,7 @@
language: php
sudo: false
php:
- 5.3
- 5.4

View File

@ -28,7 +28,7 @@
* [set](./tags/set.md), `add` и `var` — определение значения переменной
* [if](./tags/if.md), `elseif` и `else` — условный оператор
* [foreach](./tags/foreach.md), `foreaelse`, `break` and `continue` — перебор элементов массива или объекта
* [foreach](./tags/foreach.md), `foreachelse`, `break` and `continue` — перебор элементов массива или объекта
* [for](./tags/for.md), `forelse`, `break` and `continue` — цикл
* [switch](./tags/switch.md), `case` — групповой условный оператор
* [cycle](./tags/cycle.md) — циклицеский перебор массива значений

View File

@ -2,12 +2,12 @@
=========
По синтаксису шаблона Fenom похож на [Smarty](http://www.smarty.net/), но обладает рядом улучшений.
Все теги шаблонизатора заключаются в фигрные скобки: `{` — открытие тега и `}` — закрытие тега.
Все теги шаблонизатора заключаются в фигурные скобки: `{` — открытие тега и `}` — закрытие тега.
**Замечание**
Хоть Fenom и позаимствовал синтаксис Smarty, но он не заимствовал теги Smarty как есть.
Однако некоторые теги очень похожи. Но не все так плохо, Fenom имеет набор [дополнений](https://github.com/bzick/fenom-extra)
которые могут сделать Fenom более похожим на Smarty что бы переход был мягче.
которые могут сделать Fenom более похожим на Smarty, чтобы переход был мягче.
## Переменные
@ -29,7 +29,7 @@
<div class="user">Hello, <a href="/users/17">Bzick</a>.</div>
```
Переменные могут быть массивом. В этом случае обращение по ключу происходит через опертор `.` или, как в PHP, через операторы `[` и `]`
Переменные могут быть массивом. В этом случае обращение по ключу происходит через оператор `.` или, как в PHP, через операторы `[` и `]`
```smarty
<div class="user">Hello, <a href="/users/{$user.id}">{$user.name}</a>.</div>
```
@ -79,7 +79,7 @@
### Системная переменная
Безименная системная переменная начинается с `$.` и предоставляет доступ к глобальным системным переменным и системной информации:
Безымянная системная переменная начинается с `$.` и предоставляет доступ к глобальным системным переменным и системной информации:
* `$.env` — массив `$_ENV`.
* `$.get` — массив `$_GET`.
@ -94,8 +94,8 @@
* `$.tpl.basename` возвращает текущее название шаблона без схемы.
* `$.tpl.scm` возвращает схему шаблона.
* `$.tpl.options` возвращает параметры шбалона в виде целого числа.
* `$.tpl.depends` возвращает массив шаблонов на которые ссылается текущий шаблон.
* `$.tpl.time` возвращает штамп времени когда шаблон последний раз менялся
* `$.tpl.depends` возвращает массив шаблонов, на которые ссылается текущий шаблон.
* `$.tpl.time` возвращает штамп времени, когда шаблон последний раз менялся
* `$.version` возвращает версию Fenom.
* `$.const` обращение к PHP константе: `$.const.PHP_EOL` обращение к константе `PHP_EOL`. Поддерживается пространство имен
которое разделяется через точку: `$.const.Storage.FS::DIR_SEPARATOR` обращение к PHP константе `Storage\FS::DIR_SEPARATOR`
@ -223,7 +223,7 @@
{var $c = 7E-10}
```
### Булев
### Булев тип
Это простейший тип. Булевое выражает истинность значения. Он может быть либо TRUE либо FALSE.
Для указания булевого значения, используйте ключевое слово TRUE или FALSE. Оба регистро-независимы.
@ -237,11 +237,11 @@
Специальное значение NULL представляет собой переменную без значения. NULL - это единственно возможное значение типа null.
Обычно возникают путаницы между NULL и FALSE, так как по роли они похожи, но разлицаются по принципу:
NULL - это отсутствие присутствия, а FALSE - присутвие отсутствия.
NULL - это отсутствие присутствия, а FALSE - присутствие отсутствия.
### Операции
Как и любой другой язык программирования/шаблонизации Fenom поддерживает множество различных операторов:
Как и любой другой язык программирования/шаблонизации, Fenom поддерживает множество различных операторов:
* Арифметические операторы — `+`, `-`, `*`, `/`, `%`
* Логические операторы — `||`, `&&`, `!$var`, `and`, `or`, `xor`
@ -321,7 +321,7 @@ Fenom предоставляет возможноть обращаться к ф
```smarty
{$.php.some_function($a, $b, $c)}
```
метод вызывается иначе
Метод вызывается иначе
```smarty
{$.php.MyClass::method($a, $b, $c)}
@ -362,7 +362,7 @@ Fenom предоставляет возможноть обращаться к ф
* заполнитель (placeholder) — вывод переменной в шаблоне, например `{$name}`
* тег — конструкция, выполняющаяя некоторые действия, которая выглядит как именованный заполнитель (placeholder), например `{include $name}`
Теги так же можно разделить на две группы:
Теги также можно разделить на две группы:
* Функии. Тег функции вызывает пользовательскую во время выполнения шаблона, результат функции будет выведен вместо тега.
Пользовательские функции являются дополнительными и могут быть индивидуальными. Они могут быть изменены по вашему желанию, также вы можете создать новые.

View File

@ -117,6 +117,11 @@ class Fenom
*/
protected $_compile_dir = "/tmp";
/**
* @var string compile prefix ID template
*/
protected $_compile_id;
/**
* @var string[] compile directory for custom provider
*/
@ -430,6 +435,18 @@ class Fenom
return $this;
}
/**
* Set compile prefix ID template
*
* @param string $id prefix ID to store compiled templates
* @return Fenom
*/
public function setCompileId($id)
{
$this->_compile_id = $id;
return $this;
}
/**
*
* @param callable $cb
@ -1022,10 +1039,10 @@ class Fenom
foreach ($tpl as &$t) {
$t = str_replace(":", "_", basename($t));
}
return implode("~", $tpl) . "." . sprintf("%x.%x.php", crc32($hash), strlen($hash));
return $this->_compile_id . implode("~", $tpl) . "." . sprintf("%x.%x.php", crc32($hash), strlen($hash));
} else {
$hash = $tpl . ":" . $options;
return sprintf("%s.%x.%x.php", str_replace(":", "_", basename($tpl)), crc32($hash), strlen($hash));
return sprintf($this->_compile_id . "%s.%x.%x.php", str_replace(":", "_", basename($tpl)), crc32($hash), strlen($hash));
}
}

View File

@ -988,10 +988,10 @@ class Template extends Render
$parser = $this->getStorage()->getAccessor($accessor);
$is_var = false;
if($parser) {
if(is_string($parser)) {
return call_user_func_array($parser, array($tokens->next(), $this, &$is_var));
} else {
if(is_array($parser)) {
return call_user_func_array($parser['parser'], array($parser['accessor'], $tokens->next(), $this, &$is_var));
} else {
return call_user_func_array($parser, array($tokens->next(), $this, &$is_var));
}
} else {
throw new \RuntimeException("Unknown accessor '$accessor'");