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
5 changed files with 36 additions and 17 deletions

View File

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

View File

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

View File

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

View File

@@ -117,6 +117,11 @@ class Fenom
*/ */
protected $_compile_dir = "/tmp"; protected $_compile_dir = "/tmp";
/**
* @var string compile prefix ID template
*/
protected $_compile_id;
/** /**
* @var string[] compile directory for custom provider * @var string[] compile directory for custom provider
*/ */
@@ -430,6 +435,18 @@ class Fenom
return $this; 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 * @param callable $cb
@@ -1022,10 +1039,10 @@ class Fenom
foreach ($tpl as &$t) { foreach ($tpl as &$t) {
$t = str_replace(":", "_", basename($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 { } else {
$hash = $tpl . ":" . $options; $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); $parser = $this->getStorage()->getAccessor($accessor);
$is_var = false; $is_var = false;
if($parser) { if($parser) {
if(is_string($parser)) { if(is_array($parser)) {
return call_user_func_array($parser, array($tokens->next(), $this, &$is_var));
} else {
return call_user_func_array($parser['parser'], array($parser['accessor'], $tokens->next(), $this, &$is_var)); 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 { } else {
throw new \RuntimeException("Unknown accessor '$accessor'"); throw new \RuntimeException("Unknown accessor '$accessor'");