This commit is contained in:
bzick 2014-10-31 00:24:56 +03:00
parent c238053e99
commit e0a3cc3a0d
4 changed files with 60 additions and 12 deletions

View File

@ -1,8 +1,6 @@
Расширение Fenom
================
*TODO*
# Добавление тегов
В шаблонизаторе принято различать два типа тегов: омпиляторы_ и ункции_.
@ -121,7 +119,21 @@ $fenom->addTest($name, $code);
?>
```
# Расширение глобальной переменной
# Расширение глобальной переменной или функции
Fenom обладает определенным набором глобальных переменных и функций. Однако их может не хватать для удобной работы с шаблонами.
В этом случае потребуется добавить, переопределить или удалить существующие глобальные переменные или функции.
Метод `Fenom::addAccessor($name, $parser)` позволяет добавить свой обработчик на не известную глобальную переменную или функцию.
```php
$fenom->addAccessor('project', function (Fenom\Tokenizer $tokens) { /* code */ });
```
Указанный вторым аргументом, парсер будет вызван при встречи компилятором конструкции `{$.project}`.
Парсеры вызываются только на момент сборки шаблона, а не во время его выполенения.
Через метод `Fenom::addAccessor($name, $parser)` можно переопределить уже любую другую существующую глобальную переменную или функцию.
Метод `Fenom::removeAccessor($name)` позволяет удалить любую определенную глобальную переменную или функцию по ее имени.
# Источники шаблонов

View File

@ -20,7 +20,7 @@
### Теги
[Использование](./syntax.md#tags) тегов.
[Использование](./syntax.md#Теги) тегов.
* [set](./tags/set.md), `add` и `var` — определение значения переменной
* [if](./tags/if.md), `elseif` и `else` — условный оператор
@ -36,7 +36,7 @@
* [autoescape](./tags/autoescape.md) — экранирует фрагмент шаблона
* [raw](./tags/raw.md) — отключает экранирование фрагмента шаблона
* [unset](./tags/unset.md) — удаляет переменные
* или [добавте](./ext/extend.md#add-tags) свои
* или [добавте](./ext/extend.md#Добавление-тегов) свои
***
@ -64,7 +64,7 @@
* [join](./mods/join.md) — объединяет массив в строку
* так же разрешены функции: `json_encode`, `json_decode`, `count`, `is_string`, `is_array`, `is_numeric`, `is_int`, `is_object`,
`strtotime`, `gettype`, `is_double`, `ip2long`, `long2ip`, `strip_tags`, `nl2br`
* или [добавте](./ext/extend.md#add-modifiers) свои
* или [добавте](./ext/extend.md#Добавление-модификаторов) свои
***

View File

@ -102,7 +102,11 @@
если такой констатнты нет будет взята константа `Storage\FS\DIR_SEPARATOR`.
* `$.php` обращение к статическомому методу. `$.php.Storage.FS::put($filename, $data)` обращение к методу `Storage\FS::put($filename, $data)`.
`$.php.Storage.FS.put($filename, $data)` `Storage\FS\put($filename, $data)`
* `$.fetch($name, $values)`
* Системная функция `$.fetch($name, $values)` реализует метод Fenom::fetch() в шаблоне. `$name` — имя шаблона,
`$values` — дополнительные переменные, которые будут добавлены к существующим.
Функция позволяет получить резуьтат работы шаблона в переменную.
* так же вы можете [добавить](./ext/extend.md#Расширение-глобальной-переменной-или-функции) свои системные переменные и функции
## Скалярные значения
@ -120,7 +124,6 @@
| `\r` | возврат каретки (CR или 0x0D (13) в ASCII)
| `\t` | горизонтальная табуляция (HT или 0x09 (9) в ASCII)
| `\v` | вертикальная табуляция (VT или 0x0B (11) в ASCII)
<!--| `\e` | escape-знак (ESC или 0x1B (27) в ASCII) (с версии PHP 5.4.0) -->
| `\f` | подача страницы (FF или 0x0C (12) в ASCII)
| `\\` | обратная косая черта
| `\$` | знак доллара
@ -300,6 +303,37 @@ NULL - это отсутствие присутствия, а FALSE - прису
Однако такой способ применять не рекомендуется, так как если переменная `$arr` уже содержит некоторое значение (например, строку),
то это значение останется на месте и `[]` может на самом деле означать доступ к символу в строке. Лучше инициализировать переменную путем явного присваивания значения.
## Константы
Константы - это идентификаторы (имена) простых значений, определенные в PHP.
Исходя из их названия, нетрудно понять, что их значение не может изменяться в ходе выполнения шаблона.
Имена констант чувствительны к регистру. По принятому соглашению, имена констант всегда пишутся в верхнем регистре.
Константы доступны из любого шаблона через глобальную переменную {$.const.*}: `{$.const.PHP_EOL}`.
В шаблоне определить константу нельзя.
## PHP функции и методы
Fenom предоставляет возможноть обращаться к функиям и методам самого PHP. Использование их в шаблонах не рекомендуется.
Используя системную переменную `$.php` можно вызвать любую функцию или метод в шаблоне:
```smarty
{$.php.some_function($a, $b, $c)}
```
метод вызывается иначе
```smarty
{$.php.MyClass::method($a, $b, $c)}
```
пространство имен указывается перед функций или классом, разделяя точкой вместо обратного слеша:
```smarty
{$.php.My.NS.some_function($a, $b, $c)}
{$.php.My.NS.MyClass::method($a, $b, $c)}
```
Вызов функции и методов можно выключить настройкой `???` или ограничить.
## Модификаторы
Модификаторы переменных могут быть прмменены к переменным, пользовательским функциям или строкам.
@ -333,10 +367,6 @@ NULL - это отсутствие присутствия, а FALSE - прису
* Компиляторы. В отличии от функций компиляторы вызываются во время компиляции шаблона и возвращают PHP код, который описывает некоторое действие.
Компиляторы и формируют основные конструкции типа `if`, `foreach` и т.д.
```
{set $a = $.func.mailto($email)}
```
### Игнорирование кода
В шаблонизаторе Fenom используются фигурные скобки для отделения HTML от кода Fenom.

View File

@ -18,6 +18,12 @@
Все значения присвоенных переменных восстанавливаются после того, как подключаемый шаблон отработал.
Это значит, что вы можете использовать все переменные из подключающего шаблона в подключаемом, но изменения переменных внутри подключаемого шаблона не будут видны внутри подключающего шаблона после команды {include}.
Если требуется сохранить результат отрисовки шаблона в переменную то используйте `$.fetch($templates, $values)`:
```smarty
{set $data = $.fetch('user.tpl', ["name" => $data.name, "email" => $data.email])}
```
### {insert}
В отличии от `{include}` тег `{insert}` не вызывает дочерний шаблон во время отрисовки, в ставляет код дочернего шаблона в родительский на момент компиляции.