# Шаблонизатор TPL

В CMS MMOWEB используется шаблонизатор [Fenom](https://github.com/fenom-template/fenom) он легок быстр и имеет хорошую [документацию](https://github.com/fenom-template/fenom/blob/master/docs/ru/readme.md).

## Документация Fenom

**Внимание! Документация в режиме беты, тексты могут содержать опечатки**

#### Fenom

* [Быстрый старт](https://github.com/fenom-template/fenom/blob/master/docs/ru/start.md)
* [Разработка Fenom](https://github.com/fenom-template/fenom/blob/master/docs/ru/dev/readme.md)
* [Настройки](https://github.com/fenom-template/fenom/blob/master/docs/ru/configuration.md)
* [Синтаксис](https://github.com/fenom-template/fenom/blob/master/docs/ru/syntax.md)
  * [Переменные](https://github.com/fenom-template/fenom/blob/master/docs/ru/syntax.md#%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5)
  * [Значения](https://github.com/fenom-template/fenom/blob/master/docs/ru/syntax.md#%D0%A1%D0%BA%D0%B0%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F)
  * [Массивы](https://github.com/fenom-template/fenom/blob/master/docs/ru/syntax.md#%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B)
  * [Операторы](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md)
  * [Модификаторы](https://github.com/fenom-template/fenom/blob/master/docs/ru/syntax.md#%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D1%8B)
  * [Теги](https://github.com/fenom-template/fenom/blob/master/docs/ru/syntax.md#%D0%A2%D0%B5%D0%B3%D0%B8)
  * [Параметры тегов](https://github.com/fenom-template/fenom/blob/master/docs/ru/syntax.md#%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B-%D1%82%D0%B5%D0%B3%D0%BE%D0%B2)

#### Теги

[Использование](https://github.com/fenom-template/fenom/blob/master/docs/ru/syntax.md#%D0%A2%D0%B5%D0%B3%D0%B8) тегов.

* [set](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/set.md), [add](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/set.md#add) и [var](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/set.md#var) — определение значения переменной
* [if](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/if.md), [elseif](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/if.md#elseif) и [else](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/if.md#else) — условный оператор
* [foreach](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/foreach.md), [foreachelse](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/foreach.md#foreachelse), [break](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/foreach.md#break) и [continue](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/foreach.md#continue) — перебор элементов массива или объекта
* [switch](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/switch.md) и [case](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/switch.md#case) — групповой условный оператор
* [cycle](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/cycle.md) — циклический перебор массива значений
* [include](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/include.md), [insert](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/include.md#insert) — вставляет и исполняет указанный шаблон
* [extends](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/extends.md), [use](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/extends.md#use), [block](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/extends.md#block), [parent](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/extends.md#parent) и [paste](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/extends.md#paste) — [наследование](https://github.com/fenom-template/fenom/blob/master/docs/ru/inheritance.md) шаблонов
* [filter](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/filter.md) — применение модификаторов к фрагменту шаблона
* [ignore](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/ignore.md) — игнорирование тегов Fenom
* [macro](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/macro.md) и [import](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/macro.md#macro) — пользовательские функции шаблонов
* [autoescape](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/autoescape.md) — экранирует фрагмент шаблона
* [raw](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/raw.md) — отключает экранирование фрагмента шаблона
* [unset](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/unset.md) — удаляет переменные
* или [добавьте](https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extend.md#%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D0%B5%D0%B3%D0%BE%D0%B2) свои

Устаревшие теги

* [for](https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/for.md), `forelse`, `break` and `continue` — цикл

#### Модификаторы

[Использование](https://github.com/fenom-template/fenom/blob/master/docs/ru/syntax.md#modifiers) модификаторов.

* [upper](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/upper.md) aka `up` — конвертирование строки в верхний регистр
* [lower](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/lower.md) aka `low` — конвертирование строки в нижний регистр
* [date\_format](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/date_format.md) - форматирует дату, штамп времени через strftime() функцию
* [date](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/date.md) - форматирует дату, штамп времени через date() функцию
* [truncate](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/truncate.md) — обрезает текст до указанной длины
* [escape](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/escape.md) aka `e` — экранирует строку
* [unescape](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/unescape.md) — убирает экранирование строки
* [strip](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/strip.md) — удаляет лишние пробелы
* [length](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/length.md) — подсчитывает длину строки, массива, объекта
* [in](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/in.md) — проверяет наличие значения в массиве
* [match](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/match.md) — проверяет соответствие паттерну
* [ematch](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/ematch.md) — проверяет соответствие регулярному выражению
* [replace](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/replace.md) — заменяет все вхождения подстроки на строку замену
* [ereplace](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/ereplace.md) — заменяет все соответствия регулярному выражению на строку замену.
* [split](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/split.md) — разбивает строку по подстроке
* [esplit](https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/esplit.md) — разбивает строку по регулярному выражению
* [join](https://github.com/fenom-template/fenom/blob/master/docs/ru/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`
* или [добавьте](https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extend.md#%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2) свои

#### Операторы

* [Арифметические операторы](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%90%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B) — `+`, `-`, `*`, `/`, `%`
* [Логические операторы](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%9B%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B) — `||`, `&&`, `!$var`, `and`, `or`, `xor`
* [Операторы сравнения](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B-%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F) — `>`, `>=`, `<`, `<=`, `==`, `!=`, `!==`, `<>`
* [Битовые операторы](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B) — `|`, `&`, `^`, `~$var`, `>>`, `<<`
* [Операторы присвоения](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B-%D0%BF%D1%80%D0%B8%D1%81%D0%B2%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F) — `=`, `+=`, `-=`, `*=`, `/=`, `%=`, `&=`, `|=`, `^=`, `>>=`, `<<=`
* [Строковые операторы](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B) — `$str1 ~ $str2`, `$str1 ~~ $str2`, `$str1 ~= $str2`
* [Тернарные операторы](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%A2%D0%B5%D1%80%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B) — `$a ? $b : $c`, `$a ! $b : $c`, `$a ?: $c`, `$a !: $c`
* [Проверяющие операторы](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%B5-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B) — `$var?`, `$var!`
* [Оператор тестирования](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80-%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F) — `is`, `is not`
* [Оператор содержания](https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80-%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D1%8F) — `in`, `not in`

#### Расширение

* [Источники шаблонов](https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extend.md#%D0%98%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B8-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2)
* [Добавление модификаторов](https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extend.md#%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2)
* [Добавление тегов](https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extend.md#%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D0%B5%D0%B3%D0%BE%D0%B2)
* [Расширение тестового оператора](https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extend.md#%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0)
* [Расширение глобальной переменной](https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extend.md#%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B3%D0%BB%D0%BE%D0%B1%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9)
* [Расширение Fenom](https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extend.md)
* [Add-ons](https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extensions.md)
