mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Rename Cytro to Fenom
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
About Cytro [RU]
|
||||
About Fenom [RU]
|
||||
================
|
||||
|
||||
Cytro - самый быстрый, гибкий и тонкий шаблонизатор для PHP, унаследовавший синтаксис от Smarty3 и улучшив его.
|
||||
Fenom - самый быстрый, гибкий и тонкий шаблонизатор для PHP, унаследовавший синтаксис от Smarty3 и улучшив его.
|
||||
Пожалуй это единственный шаблонизатор, который не использет ни регулярные выражения, как Twig, ни лексер от BISON, как Smarty3.
|
||||
Вы не найдёте ни одного регулярного выражения в ядре Cytro, но тем не менее ядро простое, компактное и очень быстрое.
|
||||
Вы не найдёте ни одного регулярного выражения в ядре Fenom, но тем не менее ядро простое, компактное и очень быстрое.
|
||||
|
||||
* Скорость. Разбор шаблонов постоен на основе нативного [токенайзера](http://docs.php.net/tokenizer). Шаблон преобразуется в исполняемый PHP код,
|
||||
который может быть закеширован на файловой системе.
|
||||
|
||||
@@ -3,7 +3,7 @@ Benchmark
|
||||
|
||||
To start benchmark run script `benchmark/run.php`.
|
||||
|
||||
### Smarty3 vs Twig vs Cytro
|
||||
### Smarty3 vs Twig vs Fenom
|
||||
|
||||
PHP 5.4.11
|
||||
|
||||
@@ -17,9 +17,9 @@ PHP 5.4.11
|
||||
twig: compiled and !loaded 0.0337 sec, 16.1 MiB
|
||||
twig: compiled and loaded 0.0027 sec, 16.1 MiB
|
||||
|
||||
cytro: !compiled and !loaded 1.0142 sec, 8.8 MiB
|
||||
cytro: compiled and !loaded 0.0167 sec, 6.1 MiB
|
||||
cytro: compiled and loaded 0.0024 sec, 6.1 MiB
|
||||
fenom: !compiled and !loaded 1.0142 sec, 8.8 MiB
|
||||
fenom: compiled and !loaded 0.0167 sec, 6.1 MiB
|
||||
fenom: compiled and loaded 0.0024 sec, 6.1 MiB
|
||||
|
||||
Iterating of array ({foreach})
|
||||
|
||||
@@ -31,9 +31,9 @@ PHP 5.4.11
|
||||
twig: compiled and !loaded 0.0605 sec, 2.9 MiB
|
||||
twig: compiled and loaded 0.0550 sec, 2.9 MiB
|
||||
|
||||
cytro: !compiled and !loaded 0.0093 sec, 3.0 MiB
|
||||
cytro: compiled and !loaded 0.0033 sec, 2.4 MiB
|
||||
cytro: compiled and loaded 0.0027 sec, 2.4 MiB
|
||||
fenom: !compiled and !loaded 0.0093 sec, 3.0 MiB
|
||||
fenom: compiled and !loaded 0.0033 sec, 2.4 MiB
|
||||
fenom: compiled and loaded 0.0027 sec, 2.4 MiB
|
||||
|
||||
Inheriting of templates ({extends})
|
||||
|
||||
@@ -45,9 +45,9 @@ PHP 5.4.11
|
||||
twig: compiled and !loaded 0.0255 sec, 6.3 MiB
|
||||
twig: compiled and loaded 0.0038 sec, 6.3 MiB
|
||||
|
||||
cytro: !compiled and !loaded 0.1222 sec, 3.9 MiB
|
||||
cytro: compiled and !loaded 0.0004 sec, 2.4 MiB
|
||||
cytro: compiled and loaded 0.0000 sec, 2.4 MiB
|
||||
fenom: !compiled and !loaded 0.1222 sec, 3.9 MiB
|
||||
fenom: compiled and !loaded 0.0004 sec, 2.4 MiB
|
||||
fenom: compiled and loaded 0.0000 sec, 2.4 MiB
|
||||
|
||||
* **!compiled and !loaded** - template engine object created but parsers not initialized and templates not compiled
|
||||
* **compiled and !loaded** - template engine object created, template compiled but not loaded
|
||||
@@ -59,4 +59,4 @@ PHP 5.4.11
|
||||
| --------------- | ------:| --------:| ------:|
|
||||
| Smarty3 (3.1.13)| 320 | 190 | 55095 |
|
||||
| Twig (1.13.0) | 162 | 131 | 13908 |
|
||||
| Cytro (1.0.1) | 9 | 16 | 3899 |
|
||||
| Fenom (1.0.1) | 9 | 16 | 3899 |
|
||||
|
||||
@@ -31,19 +31,3 @@ Variant #2. Сloudy.
|
||||
Variant #3. Rain.
|
||||
|
||||
Variant #4. Tornado.
|
||||
|
||||
|
||||
|
||||
Error Info (x2) :
|
||||
Exception: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '839621621,839622021)' at line 1
|
||||
Query: SELECT `image_id`, `filename` FROM `s3_image_version` WHERE `format_id`=1 AND `image_id` IN (,839621621,839622021)
|
||||
#0 /www/oml.ru/s3/lib/class.db.php(480): Db::parseError('SELECT `image_i...')
|
||||
#1 /www/oml.ru/s3/forms/class.shop2.product.form.php(225): Db::query('SELECT `image_i...')
|
||||
#2 /www/oml.ru/s3/lib/class.form.php(2390): Shop2ProductForm->fillControls()
|
||||
#3 /www/oml.ru/s3/lib/class.form.php(1444): Form->execute()
|
||||
#4 /www/oml.ru/public/my/s3/data/shop2_product/edit.cphp(44): Form->display(Object(Smarty), 'form.ajax.tpl')
|
||||
#5 {main}
|
||||
|
||||
Place: /www/oml.ru/s3/lib/class.db.php:607
|
||||
Time: 2013-06-05 03:54:51
|
||||
Url: http://agyumama.ru/my/s3/data/shop2_product/edit.cphp?shop_id=196421&ver_id=636664&access=u%3B270377&popup=1&product_id=89445221&rnd=9296&xhr=1
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
|
||||
```
|
||||
$cytro->addModifier(string $modifier, callable $callback);
|
||||
$fenom->addModifier(string $modifier, callable $callback);
|
||||
```
|
||||
|
||||
* `$modifier` - название модификатора, которое будет использоваться в шаблоне
|
||||
@@ -16,7 +16,7 @@ For example:
|
||||
```
|
||||
|
||||
```php
|
||||
$cytro->addModifier('my_modifier', function ($variable, $param1, $param2) {
|
||||
$fenom->addModifier('my_modifier', function ($variable, $param1, $param2) {
|
||||
// ...
|
||||
});
|
||||
```
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
Parsing templates
|
||||
=================
|
||||
Parsing templates [RU]
|
||||
======================
|
||||
|
||||
### Tokenizer
|
||||
|
||||
Объект Tokenizer содержит список готовых к обработке токенов и необходимые для фильтрации токенов методы. Помимо основнях констант расширения Tokenizer у объекта есть макросы, объединения, определенных токенов.
|
||||
|
||||
### Parsers
|
||||
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
Add template provider
|
||||
Add template provider [RU]
|
||||
=====================
|
||||
|
||||
Источники шаблонов позволяют хранить шаблоны не только на файловой системе, а там где вам удобдно будет. Что бы указать откуда нужно взять шаблон используется схема в имени шаблона `db:page/about.tpl`, шаблон будет взят из источника `db`. Источник шаблонов добавляется через метод `addProvider`, при добавлении необходимо указать схему по которой можно запросить шаблон из этого источника:
|
||||
|
||||
```php
|
||||
$fenom->addProvider("db", $db_provider);
|
||||
```
|
||||
@@ -11,15 +11,15 @@ Tags [RU]
|
||||
Примитивное добавление функции можно осуществить следующим образом:
|
||||
|
||||
```php
|
||||
$cytro->addFunction(string $function_name, callable $callback[, callable $parser]);
|
||||
$fenom->addFunction(string $function_name, callable $callback[, callable $parser]);
|
||||
```
|
||||
|
||||
В данном случае запускается стандартный парсер, который автоматически разберет аргументы тега, которые должны быть в формате HTML аттрибутов и отдаст их в функцию ассоциативным массивом.
|
||||
В данном случае вы можете переопределить парсер на произвольный в формате `function (Cytro\Tokenizer $tokenizer, Cytro\Template $template)`
|
||||
В данном случае вы можете переопределить парсер на произвольный в формате `function (Fenom\Tokenizer $tokenizer, Fenom\Template $template)`
|
||||
Существует более совершенный способ добавления функции:
|
||||
|
||||
```php
|
||||
$cytro->addFunctionSmarty(string $function_name, callable $callback);
|
||||
$fenom->addFunctionSmarty(string $function_name, callable $callback);
|
||||
```
|
||||
|
||||
В данном случае парсер просканирует список аргументов коллбека и попробует сопоставить с аргументами из тега. Таким образом вы успешно можете добавлять Ваши штатные функции.
|
||||
@@ -29,7 +29,7 @@ $cytro->addFunctionSmarty(string $function_name, callable $callback);
|
||||
Добавление блоковой функции аналогичен добавлению строковой за исключением того что есть возможность указать парсер для закрывающего тега.
|
||||
|
||||
```php
|
||||
$cytro->addBlockFunction(string $function_name, callable $callback[, callable $parser_open[, callable $parser_close]]);
|
||||
$fenom->addBlockFunction(string $function_name, callable $callback[, callable $parser_open[, callable $parser_close]]);
|
||||
```
|
||||
|
||||
Сам коллбек принимает первым аргументом контент между открывающим и закрывающим тегом, а вторым аргументом - ассоциативный массив из аргуметов тега.
|
||||
@@ -39,14 +39,14 @@ $cytro->addBlockFunction(string $function_name, callable $callback[, callable $p
|
||||
Добавление строчного компилятора осуществляеться очень просто:
|
||||
|
||||
```php
|
||||
$cytro->addCompiler(string $compiler, callable $parser);
|
||||
$fenom->addCompiler(string $compiler, callable $parser);
|
||||
```
|
||||
|
||||
Парсер должен принимать `Cytro\Tokenizer $tokenizer`, `Cytro\Template $template` и возвращать PHP код.
|
||||
Парсер должен принимать `Fenom\Tokenizer $tokenizer`, `Fenom\Template $template` и возвращать PHP код.
|
||||
Компилятор так же можно импортировать из класса автоматически
|
||||
|
||||
```php
|
||||
$cytro->addCompilerSmart(string $compiler, $storage);
|
||||
$fenom->addCompilerSmart(string $compiler, $storage);
|
||||
```
|
||||
|
||||
`$storage` может быть как классом так и объектом. В данном случае шаблонизатор будет искать метод `tag{$compiler}`, который будет взят в качестве парсера тега.
|
||||
@@ -56,13 +56,13 @@ $cytro->addCompilerSmart(string $compiler, $storage);
|
||||
Добавление блочного компилятора осуществяется двум способами. Первый
|
||||
|
||||
```php
|
||||
$cytro->addBlockCompiler(string $compiler, array $parsers, array $tags);
|
||||
$fenom->addBlockCompiler(string $compiler, array $parsers, array $tags);
|
||||
```
|
||||
|
||||
где `$parser` ассоциативный массив `["open" => parser, "close" => parser]`, сождержащий парсер на открывающий и на закрывающий тег, а `$tags` содержит список внутренних тегов в формате `["tag_name"] => parser`, которые могут быть использованы только с этим компилятором.
|
||||
Второй способ добавления парсера через импортирование из класса или объекта методов:
|
||||
|
||||
```php
|
||||
$cytro->addBlockCompilerSmart(string $compiler, $storage, array $tags, array $floats);
|
||||
$fenom->addBlockCompilerSmart(string $compiler, $storage, array $tags, array $floats);
|
||||
```
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ For installation use [composer](http://getcompoer.org). Add in your `composer.js
|
||||
```json
|
||||
{
|
||||
"require": {
|
||||
"bzick/cytro": "dev-master"
|
||||
"bzick/fenom": "dev-master"
|
||||
}
|
||||
}
|
||||
```
|
||||
or use shell
|
||||
`composer require bzick/cytro`
|
||||
`composer require bzick/fenom`
|
||||
|
||||
If you do not use composer - use `psr-0` format for loading Cytro's classes.
|
||||
If you do not use composer - use `psr-0` format for loading Fenom's classes.
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Documentation
|
||||
=============
|
||||
|
||||
### Cytro
|
||||
### Fenom
|
||||
|
||||
* [About](./about.md)
|
||||
* [Install](./install.md)
|
||||
* [Usage](./usage.md)
|
||||
* [Syntax](./syntax.md)
|
||||
* [Settings](./settings.md)
|
||||
* [Callbacks and filters](./callbacks.md)
|
||||
@@ -47,7 +47,6 @@ Documentation
|
||||
* [filter](./tags/filter.md)
|
||||
* [ignore](./tags/ignore.md)
|
||||
* [macro](./tags/macro.md) and `import`
|
||||
* [autotrim](./tags/autotrim.md)
|
||||
* or [add](./ext/tags.md) your own
|
||||
|
||||
***
|
||||
|
||||
@@ -6,31 +6,31 @@ Settings [RU]
|
||||
Что бы установить папку для хранения кеша собранных шаблонов
|
||||
|
||||
```php
|
||||
$cytro->setCompileDir($dir);
|
||||
$fenom->setCompileDir($dir);
|
||||
```
|
||||
|
||||
### Template settings
|
||||
|
||||
```php
|
||||
// set options using factory
|
||||
$cytro = Cytro::factory($tpl_dir, $compile_dir, $options);
|
||||
$fenom = Fenom::factory($tpl_dir, $compile_dir, $options);
|
||||
// or inline using method setOptions
|
||||
$cytro->setOptions($options);
|
||||
$fenom->setOptions($options);
|
||||
```
|
||||
|
||||
Параметры могут быть массивом `'option_name' => true` (если ключ не указан автоматически задаётся false) или битовой маской.
|
||||
|
||||
* **disable_methods**, `Cytro::DENY_METHODS`, запретить вызов методов у объектов
|
||||
* **disable_native_funcs**, `Cytro::DENY_INLINE_FUNCS`, запретить использование PHP функций, кроме разрешенных
|
||||
* **auto_reload**, `Cytro::AUTO_RELOAD`, пересобирать шаблон если его оригинал был изменён (замедляет работу шаблонизатора).
|
||||
* **force_compile**, `Cytro::FORCE_COMPILE`, пересобирать шаблон при каждом вызове (сильно замедляет работу шаблонизатора).
|
||||
* **force_include**, `Cytro::FORCE_INCLUDE`, оптимизировать вставку шаблона в шаблон. Это увеличит производительность и размер собранного шаблона.
|
||||
* **disable_methods**, `Fenom::DENY_METHODS`, запретить вызов методов у объектов
|
||||
* **disable_native_funcs**, `Fenom::DENY_INLINE_FUNCS`, запретить использование PHP функций, кроме разрешенных
|
||||
* **auto_reload**, `Fenom::AUTO_RELOAD`, пересобирать шаблон если его оригинал был изменён (замедляет работу шаблонизатора).
|
||||
* **force_compile**, `Fenom::FORCE_COMPILE`, пересобирать шаблон при каждом вызове (сильно замедляет работу шаблонизатора).
|
||||
* **force_include**, `Fenom::FORCE_INCLUDE`, оптимизировать вставку шаблона в шаблон. Это увеличит производительность и размер собранного шаблона.
|
||||
|
||||
```php
|
||||
$cytro->setOptions(array(
|
||||
$fenom->setOptions(array(
|
||||
"compile_check" => true,
|
||||
"force_include" => true
|
||||
));
|
||||
// same
|
||||
$cytro->setOptions(Cytro::AUTO_RELOAD | Cytro::FORCE_INCLUDE);
|
||||
$fenom->setOptions(Fenom::AUTO_RELOAD | Fenom::FORCE_INCLUDE);
|
||||
```
|
||||
@@ -1,7 +1,7 @@
|
||||
Syntax [RU]
|
||||
===========
|
||||
|
||||
Cytro have [Smarty](http://www.smarty.net/) like syntax.
|
||||
Fenom have [Smarty](http://www.smarty.net/) like syntax.
|
||||
|
||||
## Variable
|
||||
|
||||
@@ -198,11 +198,11 @@ but if use single quote any template expressions will be on display as it is
|
||||
|
||||
### Ignoring temaplate code
|
||||
|
||||
В шаблонизаторе Cytro используются фигурные скобки для отделения HTML от кода Cytro.
|
||||
В шаблонизаторе Fenom используются фигурные скобки для отделения HTML от кода Fenom.
|
||||
Если требуется вывести текст, содержащий фигурные скобки, помните о следующих возможностях:
|
||||
|
||||
1. Использование блочного тега `{ignore}{/ignore}`. Текст внутри этого тега текст не компилируется шаблонизатором и выводится как есть.
|
||||
2. Если после открывающей фигурной скобки есть пробельный символ (пробел или `\t`) или перенос строки (`\r` или `\n`), то она не воспринимается как разделитель кода Cytro и код после неё выводится как есть.
|
||||
2. Если после открывающей фигурной скобки есть пробельный символ (пробел или `\t`) или перенос строки (`\r` или `\n`), то она не воспринимается как разделитель кода Fenom и код после неё выводится как есть.
|
||||
|
||||
Пример:
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ Tag {foreach} [RU]
|
||||
{/foreach}
|
||||
```
|
||||
|
||||
В блоке `{foreachelse}...{/foreach}` использование `{break}`, `{continue}` выбросит исключение `Cytro\CompileException` при компиляции
|
||||
В блоке `{foreachelse}...{/foreach}` использование `{break}`, `{continue}` выбросит исключение `Fenom\CompileException` при компиляции
|
||||
|
||||
### Notice
|
||||
|
||||
|
||||
20
docs/usage.md
Normal file
20
docs/usage.md
Normal file
@@ -0,0 +1,20 @@
|
||||
Basic usage
|
||||
===========
|
||||
|
||||
### Creating template engine
|
||||
|
||||
```php
|
||||
$fenom = Fenom::factory('/path/to/templates', '/path/to/template/cache', $options);
|
||||
|
||||
//or
|
||||
|
||||
$fenom = new Fenom(new FSProvider('/path/to/templates'));
|
||||
$fenom->setCompileDir('/path/to/template/cache');
|
||||
$fenom->setOptions($options);
|
||||
```
|
||||
|
||||
### Output template result
|
||||
|
||||
```php
|
||||
$fenom->display("template/name.tpl", $vars);
|
||||
```
|
||||
Reference in New Issue
Block a user