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 Расширение 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` — определение значения переменной * [set](./tags/set.md), `add` и `var` — определение значения переменной
* [if](./tags/if.md), `elseif` и `else` — условный оператор * [if](./tags/if.md), `elseif` и `else` — условный оператор
@ -36,7 +36,7 @@
* [autoescape](./tags/autoescape.md) — экранирует фрагмент шаблона * [autoescape](./tags/autoescape.md) — экранирует фрагмент шаблона
* [raw](./tags/raw.md) — отключает экранирование фрагмента шаблона * [raw](./tags/raw.md) — отключает экранирование фрагмента шаблона
* [unset](./tags/unset.md) — удаляет переменные * [unset](./tags/unset.md) — удаляет переменные
* или [добавте](./ext/extend.md#add-tags) свои * или [добавте](./ext/extend.md#Добавление-тегов) свои
*** ***
@ -64,7 +64,7 @@
* [join](./mods/join.md) — объединяет массив в строку * [join](./mods/join.md) — объединяет массив в строку
* так же разрешены функции: `json_encode`, `json_decode`, `count`, `is_string`, `is_array`, `is_numeric`, `is_int`, `is_object`, * так же разрешены функции: `json_encode`, `json_decode`, `count`, `is_string`, `is_array`, `is_numeric`, `is_int`, `is_object`,
`strtotime`, `gettype`, `is_double`, `ip2long`, `long2ip`, `strip_tags`, `nl2br` `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`. если такой констатнты нет будет взята константа `Storage\FS\DIR_SEPARATOR`.
* `$.php` обращение к статическомому методу. `$.php.Storage.FS::put($filename, $data)` обращение к методу `Storage\FS::put($filename, $data)`. * `$.php` обращение к статическомому методу. `$.php.Storage.FS::put($filename, $data)` обращение к методу `Storage\FS::put($filename, $data)`.
`$.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) | `\r` | возврат каретки (CR или 0x0D (13) в ASCII)
| `\t` | горизонтальная табуляция (HT или 0x09 (9) в ASCII) | `\t` | горизонтальная табуляция (HT или 0x09 (9) в ASCII)
| `\v` | вертикальная табуляция (VT или 0x0B (11) в ASCII) | `\v` | вертикальная табуляция (VT или 0x0B (11) в ASCII)
<!--| `\e` | escape-знак (ESC или 0x1B (27) в ASCII) (с версии PHP 5.4.0) -->
| `\f` | подача страницы (FF или 0x0C (12) в ASCII) | `\f` | подача страницы (FF или 0x0C (12) в ASCII)
| `\\` | обратная косая черта | `\\` | обратная косая черта
| `\$` | знак доллара | `\$` | знак доллара
@ -300,6 +303,37 @@ NULL - это отсутствие присутствия, а FALSE - прису
Однако такой способ применять не рекомендуется, так как если переменная `$arr` уже содержит некоторое значение (например, строку), Однако такой способ применять не рекомендуется, так как если переменная `$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 код, который описывает некоторое действие. * Компиляторы. В отличии от функций компиляторы вызываются во время компиляции шаблона и возвращают PHP код, который описывает некоторое действие.
Компиляторы и формируют основные конструкции типа `if`, `foreach` и т.д. Компиляторы и формируют основные конструкции типа `if`, `foreach` и т.д.
```
{set $a = $.func.mailto($email)}
```
### Игнорирование кода ### Игнорирование кода
В шаблонизаторе Fenom используются фигурные скобки для отделения HTML от кода Fenom. В шаблонизаторе Fenom используются фигурные скобки для отделения HTML от кода Fenom.

View File

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