From 250c9c1e1cf1d708cb80f50dc651e11d7774d7e4 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Fri, 8 Aug 2014 16:22:46 +0400 Subject: [PATCH 01/21] Update CHANGELOG.md --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d187a8c..96f162c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,24 @@ Changelog ========= +## 2.3.0 (2014-08-08) + +- Add tags {set} and {add} +- Fix bug #97 +- ++Docs +- --Bugs +- ++Tests + +### 2.2.1 (2014-07-29) + +- ++Docs +- --Bugs + +## 2.2.0 (2014-07-11) +- Add new modifiers: match, ematch, replace, ereplace, split, esplit, join +- ++Docs +- ++Tests + ### 2.1.2 (2014-07-03) - Add test for bug #86 From 823b7fc15a1bd131d1cef1158968683a58f3560b Mon Sep 17 00:00:00 2001 From: Pavel Belousov Date: Fri, 8 Aug 2014 16:44:12 +0400 Subject: [PATCH 02/21] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=85=D0=B0=D0=B1=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ru/inheritance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/inheritance.md b/docs/ru/inheritance.md index 67677a2..8f73315 100644 --- a/docs/ru/inheritance.md +++ b/docs/ru/inheritance.md @@ -1,4 +1,4 @@ Наследование шаблонов ===================== -Документации пока нет, почитайте на хабре пока \ No newline at end of file +Документации пока нет, [почитайте на хабре](http://habrahabr.ru/post/169525/) пока From 7142641ac3a3369ee417bcb25b2e2decd4fed2ed Mon Sep 17 00:00:00 2001 From: Pavel Belousov Date: Fri, 8 Aug 2014 16:50:51 +0400 Subject: [PATCH 03/21] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=BE=D0=B5=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ru/dev/internal.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/ru/dev/internal.md b/docs/ru/dev/internal.md index 2439003..93a3bbd 100644 --- a/docs/ru/dev/internal.md +++ b/docs/ru/dev/internal.md @@ -37,7 +37,7 @@ How it work ## Процесс работы При вызове метода `Fenom::display($template, $vars)` шаблонизатор [ищет](https://github.com/bzick/fenom/blob/1.2.2/src/Fenom.php#L712) в своем хранилище уже загруженный шаблон. -Если шаблона [нет](https://github.com/bzick/fenom/blob/1.2.2/src/Fenom.php#L727) - либо [загружает](https://github.com/bzick/fenom/blob/1.2.2/src/Fenom.php#L762) код шаблона с файловой системыб либо [инициирует](https://github.com/bzick/fenom/blob/1.2.2/src/Fenom.php#L759) его [компиляцию](https://github.com/bzick/fenom/blob/1.2.2/src/Fenom.php#L788). +Если шаблона [нет](https://github.com/bzick/fenom/blob/1.2.2/src/Fenom.php#L727) - либо [загружает](https://github.com/bzick/fenom/blob/1.2.2/src/Fenom.php#L762) код шаблона с файловой системы, либо [инициирует](https://github.com/bzick/fenom/blob/1.2.2/src/Fenom.php#L759) его [компиляцию](https://github.com/bzick/fenom/blob/1.2.2/src/Fenom.php#L788). ### Компиляция шаблонов @@ -64,7 +64,7 @@ How it work ### Как работает токенайзер -Объек токенайзера принимает на вход любую строчку и разбирает ее при помощи функции token_get_all(). Полученные токен складываются в массив. Каждый токен прдсатвляет из себя числовой массив из 4-х элементов: +Объект токенайзера принимает на вход любую строчку и разбирает ее при помощи функции token_get_all(). Полученные токен складываются в массив. Каждый токен прдсатвляет из себя числовой массив из 4-х элементов: * Код токена. Это либо число либо один символ. * Тело токена. Содержимое токена. From b842421408f2d9e25901be1c746e98253fcc2901 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Sat, 23 Aug 2014 12:08:32 +0400 Subject: [PATCH 04/21] Update start.md fix typos #107 --- docs/ru/start.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/ru/start.md b/docs/ru/start.md index b75282d..6360e80 100644 --- a/docs/ru/start.md +++ b/docs/ru/start.md @@ -5,7 +5,7 @@ ### Composer -Fenom зарегестирован на [packagist.org](https://packagist.org/) как пакет [fenom/fenom](https://packagist.org/packages/fenom/fenom). +Fenom зарегистрирован на [packagist.org](https://packagist.org/) как пакет [fenom/fenom](https://packagist.org/packages/fenom/fenom). Что бы установить Fenom через composer пропишите в `composer.json` списке пакетов: ```json { @@ -16,15 +16,15 @@ Fenom зарегестирован на [packagist.org](https://packagist.org/) ``` и обновите зависимости: `composer update`. -### Custom loader +### Произвольная подгрузка -Склонируйте Fenom в любую директорию Вашего проекта: `git clone https://github.com/bzick/fenom.git`. Рекомендуется использовать последнюю версию. +Клонируйте Fenom в любую директорию Вашего проекта: `git clone https://github.com/bzick/fenom.git`. Рекомендуется использовать последнюю версию. Для загрузки классов Fenom использует [psr-0](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md#autoloading-standard) стандарт. Таким образом вы можете: -* использовать Ваш загрузчик, который понимает `psr-0` формат для загрузки классов Fenom из директории `src/` с пространством имен `Fenom`. -* или использовать строенный загрузчик Fenom: `Fenom::registerAutoload();` для загрузки самого себя. +* использовать Ваш автозагрузчик, который понимает `psr-0` формат для загрузки классов Fenom из директории `src/` с пространством имен `Fenom`. +* или использовать встроенный автозагрузчик Fenom: `Fenom::registerAutoload();` для загрузки самого себя. -Так же вы можете использовать встроенный в Fenom загрузчик для загрузки других классов в `psr-0` формате наименования класса и файла: +Так же вы можете использовать встроенный в Fenom автозагрузчик для загрузки других классов в `psr-0` формате: ```php Fenom::registerAutoload(PROJECT_DIR."/classes"); ``` @@ -66,7 +66,7 @@ $fenom->display("template/name.tpl", $vars); $result = $fenom->fetch("template/name.tpl", $vars); ``` -Для отрисовки большого количества данных можно использовать поток +Для вывода большого количества данных можно использовать поток ```php // $fenom->pipe(string $template, array $variables, callable $callback, int $chunk_size) : void @@ -81,4 +81,3 @@ $fenom->pipe( Поток позволяет обрабатывать большой результат по кускам, размер куска указывается в байтах аргументом `$chunk_size`. Каждый кусок передается в `$callback` для обработки или вывода. - From 0be8b15d687f821d659c48aeec60efdabe2947be Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Sat, 23 Aug 2014 12:16:26 +0400 Subject: [PATCH 05/21] Update syntax.md fix typos #107 --- docs/ru/syntax.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/ru/syntax.md b/docs/ru/syntax.md index ef9106a..2fb4f03 100644 --- a/docs/ru/syntax.md +++ b/docs/ru/syntax.md @@ -2,7 +2,7 @@ ========= По синтаксису шаблона Fenom похож на [Smarty](http://www.smarty.net/), но обладает рядом улучшений. -Все теги шаблонизатора заключаются в фигрные скобки: `{` — открытие тега и `}` — закрытие тега. +Все теги шаблонизатора заключаются в фигурные скобки: `{` — открытие тега и `}` — закрытие тега. **Замечание** Хоть Fenom и позаимствовал синтаксис Smarty, но он не заимствовал теги Smarty как есть. @@ -29,7 +29,7 @@
Hello, Bzick.
``` -Переменные могут быть массивом. В этом случае обращение по ключу происходит через опертор `.` или, как в PHP, через операторы `[` и `]` +Переменные могут быть массивом. В этом случае обращение по ключу происходит через оператор `.` или, как в PHP, через операторы `[` и `]` ```smarty
Hello, {$user.name}.
``` @@ -38,12 +38,12 @@ ``` -В случае объекта, доступ к его свойствам осущесвляется так как и в PHP — через оператор `->`: +В случае объекта, доступ к его свойствам осуществляется так как и в PHP — через оператор `->`: ```smarty ``` -Методы, как и свойства можно вызвать через оператор `->`, передав в метод любые рагументы: +Методы, как и свойства можно вызвать через оператор `->`, передав в метод любые аргументы: ```smarty ``` @@ -53,7 +53,7 @@ Что бы избежать фатальной ошибки определите метод `__call` у класса объекта. Вызов методов в шаблоне можно вообще выключить в [настройках](./docs/configuration.md). -Ниже приведены комбинированые примеры работы с переменными: +Ниже приведены комбинированные примеры работы с переменными: ```smarty {$foo.bar.baz} @@ -79,7 +79,7 @@ ### Системная переменная -Безименная системная переменная начинается с `$.` и предоставляет доступ к глобальным системным переменным и системной информации: +Безымянная системная переменная начинается с `$.` и предоставляет доступ к глобальным системным переменным и системной информации: * `$.get` — `$_GET`. * `$.post` — `$_POST`. @@ -183,7 +183,7 @@ **Замечение** Двоичная запись числа (`0b1011011`) не доступна на старых версиях PHP — 5.3 или ниже. -Попытка исользовать на старых версия PHP приведет к исключению при компиляциях. +Попытка использовать на старых версия PHP приведет к исключению при компиляциях. **Замечение** Размер целого числа зависит от платформы, хотя, как правило, максимальное значение примерно равно 2 миллиардам (это 32-битное знаковое). @@ -213,8 +213,8 @@ Специальное значение NULL представляет собой переменную без значения. NULL - это единственно возможное значение типа null. -Обычно возникают путаницы между NULL и FALSE, так как по роли они похожи, но разлицаются по принципу: -NULL - это отсутствие присутствия, а FALSE - присутвие отсутствия. +Обычно возникают путаницы между NULL и FALSE, так как по роли они похожи, но различаются по принципу: +NULL - это отсутствие присутствия, а FALSE - присутствие отсутствия. ### Операции @@ -264,7 +264,7 @@ NULL - это отсутствие присутствия, а FALSE - прису * Числа с плавающей точкой также будут преобразованы к числу, т.е. дробная часть будет отброшена. Например, ключ со значением `8.7` будет в действительности сохранен со значением `8`. * Булев также преобразовываются к целому числу. Например, ключ со значением `true` будет сохранен со значением `1` и ключ со значением `false` будет сохранен со значением `0`. * NULL будет преобразован к пустой строке. Например, ключ со значением `null` будет в действительности сохранен со значением `""`. -* Массивы (тип array) и объекты (тип object) не могут использоваться в качестве ключей. При подобном использовании будет генерироваться предупреждение: Недопустимый тип смещения (Illegal offset type). +* Массивы (тип array) и объекты (тип object) не могут использоваться в качестве ключей. При подобном использовании компилятор будет генерировать предупреждение: Недопустимый тип смещения (Illegal offset type). Если несколько элементов в объявлении массива используют одинаковый ключ, то только последний будет использоваться, а все другие будут перезаписаны. @@ -285,7 +285,7 @@ NULL - это отсутствие присутствия, а FALSE - прису ## Модификаторы -Модификаторы переменных могут быть прмменены к переменным, пользовательским функциям или строкам. +Модификаторы переменных могут быть применены к переменным, пользовательским функциям или строкам. Для их применения надо после модифицируемого значения указать символ `|` (вертикальная черта) и название модификатора. Так же модификаторы могут принимать параметры, которые влияют на их поведение. Эти параметры следуют за названием модификатора и разделяются `:` (двоеточием). @@ -304,14 +304,14 @@ NULL - это отсутствие присутствия, а FALSE - прису ## Теги -Все сущности шаблона можно разжелить на две группы: +Все сущности шаблона можно разбить на две группы: * заполнитель (placeholder) — вывод переменной в шаблоне, например `{$name}` -* тег — конструкция выполняющаяя некоторые действия, выглядит как именованный заполнитель (placeholder), например `{include $name}` +* тег — конструкция выполняющая некоторые действия, выглядит как именованный заполнитель (placeholder), например `{include $name}` Теги так же можно разделить на две группы: -* Функии. Тег функции вызывает пользовательскую во время выполнения шаблона, результат функции будет выведен вместо тега. +* Функии. Тег функции вызывает пользовательскую функцию во время выполнения шаблона, результат функции будет выведен вместо тега. Пользовательские функции являются дополнительными и могут быть индивидуальными. Они могут быть изменены по вашему желанию, также вы можете создать новые. * Компиляторы. В отличии от функций компиляторы вызываются во время компиляции шаблона и возвращают PHP код, который описывает некоторое действие. Компиляторы и формируют основные конструкции типа `if`, `foreach` и т.д. From b3992033c9670066ad4f8fe9d99fb31c15b05b83 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Sat, 23 Aug 2014 12:23:04 +0400 Subject: [PATCH 06/21] Update operators.md fix typos #107 --- docs/ru/operators.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/ru/operators.md b/docs/ru/operators.md index 996ef60..baabad7 100644 --- a/docs/ru/operators.md +++ b/docs/ru/operators.md @@ -7,7 +7,7 @@ * `-$a` - отрицание знака, смена знака `$a`. * `$a + $b` - сложение, сумма `$a` и `$b`. -* `$a - $b` - вычитаение, разность `$a` и `$b`. +* `$a - $b` - вычитание, разность `$a` и `$b`. * `$a * $b` - умножение, произведение `$a` и `$b`. * `$a / $b` - деление, частное от деления `$a` на `$b`. * `$a % $b` - деление по модулю, целочисленный остаток от деления `$a` на `$b`. @@ -64,13 +64,13 @@ | Тип операнда 1 | Тип операнда 2 | Результат | |-------------------|-------------------|-----------| -| null или string | string | NULL преобразуется в "", числовое или лексическое сравнение | -| bool или null | что угодно | Преобразуется в bool, FALSE < TRUE | -| object | object | Встроенные классы могут определять свои собственные правила сравнения, объекты разных классов не сравниваются, объекты одного класса - сравниваются свойства тем же способом, что и в массивах | -| string или number | string или number | Строки переводятся в числа, обычная математика | -| array | array | Массивы с меньшим числом элементов считаются меньше, если ключ из первого операнда не найден во втором операнде - массивы не могут сравниваться, иначе идет сравнение соответствующих значений | -| object | что угодно | object всегда больше | -| array | что угодно | array всегда больше | +| null или строка | строка | NULL преобразуется в "", числовое или лексическое сравнение | +| булев или null | что угодно | Преобразуется в bool, FALSE < TRUE | +| объект | объект | Встроенные классы могут определять свои собственные правила сравнения, объекты разных классов не сравниваются, объекты одного класса - сравниваются свойства тем же способом, что и в массивах | +| строка или число | строка или число | Строки переводятся в числа, обычная математика | +| массив | массив | Массивы с меньшим числом элементов считаются меньше, если ключ из первого операнда не найден во втором операнде - массивы не могут сравниваться, иначе идет сравнение соответствующих значений | +| объект | что угодно | object всегда больше | +| массим | что угодно | array всегда больше | ### Побитовые операторы @@ -129,7 +129,7 @@ Fenom поддерживает префиксные и постфиксные о ### Строковый оператор -Оператор конкатенации `~` возвращает строку, представляющую собой соединение левого и правого аргумента. +Оператор объединения `~` возвращает строку, представляющую собой соединение левого и правого аргумента. `$a ~ $b` - возвращает результат объединения сток `$a` и `$b` @@ -175,7 +175,7 @@ Fenom поддерживает префиксные и постфиксные о {$request.action !: 'default'} ``` -Как видно, оператор `:?` более расширенный чем `:!` и включает в себя функциональность опертора `!:`. +Как видно, оператор `:?` более расширенный чем `:!` и включает в себя функциональность оператора `!:`. Для упрощения понимания можно подвести итог: @@ -194,7 +194,7 @@ Fenom поддерживает префиксные и постфиксные о ### Операторы проверки Оператор проверки это упрощенный тернарный оператор от которого осталась только часть проверки без возвращаемых вариантов. -Суть операторов — быстро произвести проверку на не пустое занчение и существование пременной. +Суть операторов — быстро произвести проверку на не пустое значение и существование пременной. * `$a?` - вернет `TRUE` если `$a` не пустое * `$a!` - вернет `TRUE` если `$a` существует @@ -206,7 +206,7 @@ Fenom поддерживает префиксные и постфиксные о ### Оператор тестирования -Оператор `is` производит тесты над перменными или выражением. Левый операнд считается тестируемым, а правый операнд — название теста: +Оператор `is` производит тесты над переменными или выражением. Левый операнд считается тестируемым, а правый операнд — название теста: ```smarty {* проверка переменной на не четность *} @@ -217,7 +217,7 @@ Fenom поддерживает префиксные и постфиксные о Результат тестирования может быть инвертирован с помощью `is not` оператора: ```smarty -{* проверяем переменную что ее значение не явдяется числом *} +{* проверяем переменную что ее значение не является числом *} {$a is not integer} ``` @@ -234,7 +234,7 @@ Fenom поддерживает префиксные и постфиксные о * `string` — строка * `callback`, `callable` — функция * `number`, `numeric` — число, в общем понимании -* `$a is iterable` - тестирует переменную на возможность итеративного обхода. +* `$a is iterable` - тестирует переменную на возможность итеративного обхода (для `foreach`). * `$a is template` - переменная `$a` содержит название существующего шаблона. * `$a is empty` - переменная пустая. * `$a is set` - переменная существует. @@ -245,7 +245,7 @@ Fenom поддерживает префиксные и постфиксные о ### Оператор присутствия -Оператор `in` проверяет присутвие скалярного значения слева в массиве или строке справа. +Оператор `in` проверяет присутствие скалярного значения слева в массиве или строке справа. Результат тестирования может быть инвертирован с помощью `not ni` оператора. * `$a in list $b` - значение `$a` содержится в массиве значений `$b` @@ -253,10 +253,10 @@ Fenom поддерживает префиксные и постфиксные о * `$a in string $b` - значение `$a` содержится в `$b` как подстрока. * `$a in $b` - значение `$a` содержится в `$b`, где `$b` может быть строкой, обычным или ассоциативным массивом. Этот вариант долгий так как требуется проверить типы переменной `$b`. -Однако если вместо $b явно задан массив иили строка то оператор сам адаптируется для быстрого поиска. +Однако если вместо $b явно задан массив или строка то оператор сам адаптируется для быстрого поиска. ```smarty {'df' in 'abcdefg'} {5 in [1, 5, 25, 125]} {99 in keys [1, 5, 25, 99 => 125]} -``` \ No newline at end of file +``` From 4d89a7f3d01e5df5dd5648b5a123527313b89625 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Sat, 23 Aug 2014 12:29:25 +0400 Subject: [PATCH 07/21] Update extend.md Fix typos #107 --- docs/ru/ext/extend.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/ru/ext/extend.md b/docs/ru/ext/extend.md index 0398cfa..6e3cbe0 100644 --- a/docs/ru/ext/extend.md +++ b/docs/ru/ext/extend.md @@ -19,7 +19,7 @@ Compilers invokes during compilation template to PHP source and have to $fenom->addFunction(string $function_name, callable $callback[, callable $parser]); ``` -В данном случае запускается стандартный парсер, который автоматически разберет аргументы тега, которые должны быть в формате HTML аттрибутов и отдаст их в функцию ассоциативным массивом: +В данном случае запускается стандартный парсер, который автоматически разберет аргументы тега, которые должны быть в формате HTML атрибутов и отдаст их в функцию ассоциативным массивом: ```php $fenom->addFunction("some_function", function (array $params) { /* ... */ }); ``` @@ -41,10 +41,10 @@ public static function calc($x, $y = 5) { /* ... */} // ... $fenom->addFunctionSmart('calc', 'XYCalcs::calc'); ``` -then +пример выше позволяет объявить тег `{calc}` и спользовать его: ```smarty -{calc x=$top y=50} or {calc y=50 x=$top} is XYCalcs::calc($top, 50) -{calc x=$top} or {calc $top} is XYCalcs::calc($top) +{calc x=$top y=50} или {calc y=50 x=$top} вызовет XYCalcs::calc($top, 50) +{calc x=$top} или {calc $top} вызовет XYCalcs::calc($top) ``` Таким образом вы успешно можете добавлять Ваши функции или методы. @@ -131,8 +131,8 @@ $fenom->addTest($name, $code); который считывает шаблоны из указанной директории. Источник шаблонов должен реализовать интерфейс `Fenom\ProviderInterface`. -Используйте метод `$fenom->setProvider(...)` что бы добавить источник в шаблонизатор, указав навание источника и, если есть необходимость, -задать директорию кеша для шаблонов из этого источника. Рассмотрим на примере, реализуем источик шаблонов из базы данных. +Используйте метод `$fenom->setProvider(...)` что бы добавить источник в шаблонизатор, указав название источника и, если есть необходимость, +задать директорию кеша для шаблонов из этого источника. Рассмотрим на примере, реализуем источник шаблонов из базы данных. Создадим источник: @@ -164,11 +164,11 @@ $fenom->display("db:index.tpl", $vars); # Расширение кеша (эксперементальное) -Изначально Fenom не расчитывался на то что кеш скомпиленых шаблонов может располагаться не на файловой системе. +Изначально Fenom не рассчитывался на то что кеш скомпиленых шаблонов может располагаться не на файловой системе. Однако, в теории, есть возможность реализовать свое кеширование для скомпиленых шаблонов без переопределения шаблонизатора. Речь идет о своем протоколе, отличным от `file://`, который [можно определить](http://php.net/manual/en/class.streamwrapper.php) в PHP. -Ваш протол должени иметь класс реализации протокола как указан в документации [Stream Wrapper](http://www.php.net/manual/en/class.streamwrapper.php). +Ваш протокол должен иметь класс реализации как указано в документации [Stream Wrapper](http://www.php.net/manual/en/class.streamwrapper.php). Класс протокола может иметь не все указанные в документации методы. Вот список методов, необходимых шаблонизатору: * [CacheStreamWrapper::stream_open](http://www.php.net/manual/en/streamwrapper.stream-open.php) @@ -176,14 +176,14 @@ $fenom->display("db:index.tpl", $vars); * [CacheStreamWrapper::stream_close](http://www.php.net/manual/en/streamwrapper.stream-close.php) * [CacheStreamWrapper::rename](http://www.php.net/manual/en/streamwrapper.rename.php) -For `include`: +Для работы через `include`: * [CacheStreamWrapper::stream_stat](http://www.php.net/manual/en/streamwrapper.stream-stat.php) * [CacheStreamWrapper::stream_read](http://www.php.net/manual/en/streamwrapper.stream-read.php) * [CacheStreamWrapper::stream_eof](http://www.php.net/manual/en/streamwrapper.stream-eof.php) **Note** -(On 2014-05-13) Zend OpCacher кроме `file://` и `phar://` не поддеривает другие протоколы. +(On 2014-05-13) Zend OpCacher кроме `file://` и `phar://` не поддерживает другие протоколы. Пример работы кеша From 57d1ca37ee3c93c2b018046470c268f03e858998 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Sat, 23 Aug 2014 12:48:18 +0400 Subject: [PATCH 08/21] Update readme.md Add warning --- docs/ru/readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/ru/readme.md b/docs/ru/readme.md index 22ea6e4..66f97aa 100644 --- a/docs/ru/readme.md +++ b/docs/ru/readme.md @@ -1,6 +1,10 @@ Документация ============= +grammar nazi required + +**Внимание! Документация в режиме беты, тексты могут содержать опечатки** + ### Fenom * [Быстрый старт](./start.md) From 94a588e4942fce6fdf458bb4e0df2cf48fb3bb94 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Sat, 23 Aug 2014 14:09:18 +0400 Subject: [PATCH 09/21] Update start.md Add example (in progress) --- docs/ru/start.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/ru/start.md b/docs/ru/start.md index 6360e80..8b63a99 100644 --- a/docs/ru/start.md +++ b/docs/ru/start.md @@ -81,3 +81,30 @@ $fenom->pipe( Поток позволяет обрабатывать большой результат по кускам, размер куска указывается в байтах аргументом `$chunk_size`. Каждый кусок передается в `$callback` для обработки или вывода. + + From 506fbd8909bf4ec0fdb9aa4a8748bf746e9efe78 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Fri, 29 Aug 2014 10:43:23 +0400 Subject: [PATCH 10/21] Update extend.md --- docs/ru/ext/extend.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/ext/extend.md b/docs/ru/ext/extend.md index 6e3cbe0..ac7165b 100644 --- a/docs/ru/ext/extend.md +++ b/docs/ru/ext/extend.md @@ -58,7 +58,7 @@ $fenom->addBlockFunction(string $function_name, callable $callback[, callable $p Сам коллбек принимает первым аргументом контент между открывающим и закрывающим тегом, а вторым аргументом - ассоциативный массив из аргуметов тега: ```php -$fenom->addBlockFunction('some_block_function', function ($content, array $params) { /* ... */}); +$fenom->addBlockFunction('some_block_function', function (array $params, $content) { /* ... */}); ``` ## Линейный компилятор From 0514d579c876f3c98ac2e500ccba0af9c89df629 Mon Sep 17 00:00:00 2001 From: Pavel Belousov Date: Fri, 5 Sep 2014 17:00:34 +0400 Subject: [PATCH 11/21] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B8=D0=B9=20=D1=82=D0=B5=D0=BA=D1=81=D1=82?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=B0=D0=BD=D0=B3=D0=BB=D0=B8=D0=B9=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ru/ext/extend.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/ru/ext/extend.md b/docs/ru/ext/extend.md index ac7165b..0ad5d64 100644 --- a/docs/ru/ext/extend.md +++ b/docs/ru/ext/extend.md @@ -6,7 +6,6 @@ # Добавление тегов В шаблонизаторе принято различать два типа тегов: _компиляторы_ и _функции_. -Compilers invokes during compilation template to PHP source and have to Компиляторы вызываются во время преобразования кода шаблона в PHP код и возвращяю PHP код который будет вставлен вместо тега. А функции вызываются непременно в момент выполнения шаблона и возвращают непосредственно данные которые будут отображены. Среди тегов как и в HTML есть строчные и блоковые теги. From f27ddd904ee6cc320d16b7912e51ad791ca63794 Mon Sep 17 00:00:00 2001 From: Pavel Belousov Date: Fri, 5 Sep 2014 17:04:53 +0400 Subject: [PATCH 12/21] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BD=D0=B5=D0=B4=D0=BE=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=B5=D0=B4=D1=91=D0=BD=D0=BD=D1=83=D1=8E=20=D1=84=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ru/ext/extend.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/ext/extend.md b/docs/ru/ext/extend.md index ac7165b..f71f321 100644 --- a/docs/ru/ext/extend.md +++ b/docs/ru/ext/extend.md @@ -102,7 +102,7 @@ $fenom->addModifier(string $modifier, callable $callback); * `$modifier` - название модификатора, которое будет использоваться в шаблоне * `$callback` - коллбек, который будет вызван для изменения данных -For example: +Например: ```smarty {$variable|my_modifier:$param1:$param2} From 435fd15a67a39cdeb0a507f8e3d63d053549eae3 Mon Sep 17 00:00:00 2001 From: Pavel Belousov Date: Mon, 8 Sep 2014 01:17:48 +0400 Subject: [PATCH 13/21] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ru/tags/set.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/ru/tags/set.md b/docs/ru/tags/set.md index c498092..a92b8b8 100644 --- a/docs/ru/tags/set.md +++ b/docs/ru/tags/set.md @@ -49,20 +49,20 @@ ```smarty {set $v} Some long {$text|trim} -{/var} +{/set} ``` -Такой вариант создания позволяет применить модификаторы к данным переде тем как они будут сохранены в переменную: +Такой вариант создания позволяет применить модификаторы к данным перед тем как они будут сохранены в переменную: ```smarty {set $v|escape} {* применение можификатора к значению *} Some long {$text|trim} -{/var} +{/set} ``` ### {add} -Тег {add} делает тоже самое что и тег {set} за исключением того что сначало проверяет наличие переменной и если переменной нет — задет новое значение. +Тег {add} делает тоже самое что и тег {set} за исключением того что сначала проверяет наличие переменной и если переменной нет — задет новое значение. ```smarty {add $var = 'value'} @@ -78,4 +78,3 @@ Тег {var} старое название тега {set}, сейчас это одно и тоже. - From 16b1bef16977ccffa09aba34b51c6bfa984d172b Mon Sep 17 00:00:00 2001 From: Shmavon Gazanchyan Date: Mon, 15 Sep 2014 18:05:39 +0100 Subject: [PATCH 14/21] Remove duplicate content Git instructions are already exist in readme.md file --- docs/en/dev/git.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 docs/en/dev/git.md diff --git a/docs/en/dev/git.md b/docs/en/dev/git.md deleted file mode 100644 index c9e656b..0000000 --- a/docs/en/dev/git.md +++ /dev/null @@ -1,5 +0,0 @@ -Git conversation -================ - -Ветка `master` содержит стабильную последнюю версию проекта. В ветку `master` может сливаться новая версия проекта из `develop` или исправления. -Ветка `develop`, для разработки, содержит не стабильную версию проекта. Принимает все новшевства, изменения и исправления. From 292bdd90b5e5c57fd84ac180153b6e971d8580f2 Mon Sep 17 00:00:00 2001 From: Shmavon Gazanchyan Date: Mon, 15 Sep 2014 18:06:05 +0100 Subject: [PATCH 15/21] Editorial changes for dev readme --- docs/en/dev/readme.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/en/dev/readme.md b/docs/en/dev/readme.md index 4e96964..ef019b2 100644 --- a/docs/en/dev/readme.md +++ b/docs/en/dev/readme.md @@ -1,12 +1,15 @@ Develop ======= -If you want to discuss the enhancement of the Fenom, create an issue on Github or submit a pull request. +If you want to contribute to Fenom please feel free to create an issue or submit a pull request on Github. -There tho branches — master and develop. -The branch master for stable releases and hotfixes; the branch develop for development of features. Each tag names by rule `major.minor.fix` (1.4.9, 1.1.2 etc) and creates from master. Version changes by the rule of [semantic versioning](http://semver.org/). +There are two branches: + +* `master` branch is for stable releases and hotfixes +* `develop` branch is for development of features + +Each tag names by rule `major.minor.fix` (1.4.9, 1.1.2, etc.) and creates from master. Version changes by the rule of [semantic versioning](http://semver.org/). For questions: a.cobest@gmail.com (English, Russian languages) - -* the [scheme of work](schema.md) +* the [scheme of work](schema.md) \ No newline at end of file From 8259503efe67c0bb770e554b97e2f080923de2c2 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Fri, 19 Sep 2014 17:58:28 +0400 Subject: [PATCH 16/21] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8031ed8..5a8e7f0 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Fenom - Template Engine for PHP [![Latest Stable Version](https://poser.pugx.org/fenom/fenom/v/stable.png)](https://packagist.org/packages/fenom/fenom) [![Build Status](https://travis-ci.org/bzick/fenom.svg?branch=master)](https://travis-ci.org/bzick/fenom) -[![Coverage Status](https://coveralls.io/repos/bzick/fenom/badge.png?branch=master)](https://coveralls.io/r/bzick/fenom?branch=master) +[![Coverage Status](https://img.shields.io/coveralls/bzick/fenom.svg)](https://coveralls.io/r/bzick/fenom?branch=master) [![Total Downloads](https://poser.pugx.org/fenom/fenom/downloads.png)](https://packagist.org/packages/fenom/fenom) ## [Quick start](./docs/en/start.md) :: [Documentation](./docs/readme.md) [[en](./docs/en/readme.md)|[ru](./docs/ru/readme.md)] :: [Benchmark](./docs/en/benchmark.md) From d89a315d4b6a70b1f6066723c96f88622caf3cf0 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Mon, 13 Oct 2014 14:33:50 +0400 Subject: [PATCH 17/21] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a8e7f0..d63cec8 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Fenom - Template Engine for PHP ### What is it -**Fenom** *(from "fenomenal")* — lightweight template engine for PHP. +**Fenom** — lightweight template engine for PHP. It means: From ab52186dfab3ade4d829f3524757a04429829d72 Mon Sep 17 00:00:00 2001 From: Ivan Shalganov Date: Wed, 15 Oct 2014 10:01:22 +0400 Subject: [PATCH 18/21] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d63cec8..1177347 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Fenom - Template Engine for PHP ### What is it -**Fenom** — lightweight template engine for PHP. +**Fenóm** — lightweight template engine for PHP. It means: From f532658cc431d2b68c1ffba12b1122e6dc098ad4 Mon Sep 17 00:00:00 2001 From: bzick Date: Thu, 6 Nov 2014 00:55:32 +0300 Subject: [PATCH 19/21] Fix #122. Compatibility problem with mb_string --- src/Fenom/Template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Fenom/Template.php b/src/Fenom/Template.php index 09bf5e6..1396a9d 100644 --- a/src/Fenom/Template.php +++ b/src/Fenom/Template.php @@ -193,7 +193,7 @@ class Template extends Render $this->_src = call_user_func($filter, $this, $this->_src); } while (($start = strpos($this->_src, '{', $pos)) !== false) { // search open-symbol of tags - switch ($this->_src[$start + 1]) { // check next character + switch (substr($this->_src, $start + 1, 1)) { // check next character case "\n": case "\r": case "\t": From b0422ad43cfece34a13a59129ad684d06fc95156 Mon Sep 17 00:00:00 2001 From: bzick Date: Thu, 6 Nov 2014 22:31:59 +0300 Subject: [PATCH 20/21] Add example --- sandbox/fenom.php | 19 +++-------- sandbox/templates/concat-bug.tpl | 2 -- sandbox/templates/extends/75-child.tpl | 13 ------- sandbox/templates/extends/75-parent.tpl | 12 ------- sandbox/templates/extends/parent.tpl | 0 sandbox/templates/greeting.tpl | 45 +++++++++++++++++++++---- sandbox/templates/macros.tpl | 17 +++++++--- 7 files changed, 56 insertions(+), 52 deletions(-) delete mode 100644 sandbox/templates/concat-bug.tpl delete mode 100644 sandbox/templates/extends/75-child.tpl delete mode 100644 sandbox/templates/extends/75-parent.tpl delete mode 100644 sandbox/templates/extends/parent.tpl diff --git a/sandbox/fenom.php b/sandbox/fenom.php index e76845b..4aff4aa 100644 --- a/sandbox/fenom.php +++ b/sandbox/fenom.php @@ -1,19 +1,8 @@ compile("concat-bug.tpl", false)->getBody()); -} \ No newline at end of file +$fenom->display('greeting.tpl'); \ No newline at end of file diff --git a/sandbox/templates/concat-bug.tpl b/sandbox/templates/concat-bug.tpl deleted file mode 100644 index 4f9fa48..0000000 --- a/sandbox/templates/concat-bug.tpl +++ /dev/null @@ -1,2 +0,0 @@ -Some eval: -{$dop_content = ": some texta"} \ No newline at end of file diff --git a/sandbox/templates/extends/75-child.tpl b/sandbox/templates/extends/75-child.tpl deleted file mode 100644 index e99ff4b..0000000 --- a/sandbox/templates/extends/75-child.tpl +++ /dev/null @@ -1,13 +0,0 @@ -{extends 'extends/75-parent.tpl'} -{block 'child'} - {macro child_test(v, i)} - child test - {$v}, i = {$i};
- {var $i = $i -1} - {if $i > 0} - {macro.child_test v=$v i=$i} - {/if} - {/macro} - - child call:
- {macro.child_test v = 'ok' i = 5} -{/block} \ No newline at end of file diff --git a/sandbox/templates/extends/75-parent.tpl b/sandbox/templates/extends/75-parent.tpl deleted file mode 100644 index 3f360b0..0000000 --- a/sandbox/templates/extends/75-parent.tpl +++ /dev/null @@ -1,12 +0,0 @@ -{macro parent_test(v, i)} - parent test - {$v}, i = {$i};
-{var $i = $i -1} -{if $i > 0} - {macro.parent_test v=$v i=$i} -{/if} -{/macro} - -{block 'child'}{/block} - -parent call:
-{macro.parent_test v = 'ok' i = 5}
\ No newline at end of file diff --git a/sandbox/templates/extends/parent.tpl b/sandbox/templates/extends/parent.tpl deleted file mode 100644 index e69de29..0000000 diff --git a/sandbox/templates/greeting.tpl b/sandbox/templates/greeting.tpl index 925f85a..b9c2e84 100644 --- a/sandbox/templates/greeting.tpl +++ b/sandbox/templates/greeting.tpl @@ -1,7 +1,40 @@ -{var:escape $a} -asdasd -{/var} +{include "header.tpl" title=""} -{*{Ts\Math::multi x=34 y=44}*} -{*{$a + Ts\Math::multi(34, 44)}*} -{*{34|Ts\Math::multi:44}*} \ No newline at end of file + {import 'macros.tpl' as menu} + + {menu.pills active='sandbox' items=$items} + +
+

Jumbotron heading

+

Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

+

Sign up today

+
+ +
+ {set $text} +
+

Subheading

+

Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.

+ +

Subheading

+

Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.

+ +

Subheading

+

Maecenas sed diam eget risus varius blandit sit amet non magna.

+
+ {/set} + + {$text} + +
+

Subheading

+

Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.

+ +

Subheading

+

Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.

+ +

Subheading

+

Maecenas sed diam eget risus varius blandit sit amet non magna.

+
+
+{include "footer.tpl"} \ No newline at end of file diff --git a/sandbox/templates/macros.tpl b/sandbox/templates/macros.tpl index b7b91ba..95911e7 100644 --- a/sandbox/templates/macros.tpl +++ b/sandbox/templates/macros.tpl @@ -1,5 +1,14 @@ -{macro factorial(num)} -{if $num} - {$num} {macro.factorial num=$num-1} {$num} -{/if} +{macro pills($title, $items, $active)} +
+ +

{$title}

+
{/macro} \ No newline at end of file From 22dc90943fb3b8544728514a8e79c156bebb4995 Mon Sep 17 00:00:00 2001 From: bzick Date: Thu, 6 Nov 2014 22:32:20 +0300 Subject: [PATCH 21/21] Add example --- sandbox/templates/footer.tpl | 8 ++++++++ sandbox/templates/header.tpl | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 sandbox/templates/footer.tpl create mode 100644 sandbox/templates/header.tpl diff --git a/sandbox/templates/footer.tpl b/sandbox/templates/footer.tpl new file mode 100644 index 0000000..67233e6 --- /dev/null +++ b/sandbox/templates/footer.tpl @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/sandbox/templates/header.tpl b/sandbox/templates/header.tpl new file mode 100644 index 0000000..aecacdd --- /dev/null +++ b/sandbox/templates/header.tpl @@ -0,0 +1,22 @@ + + + + + + + + + + {$title} + + + + + + + + + + + +
\ No newline at end of file