Дата публикации
14 Августа 2019
Дата изменения
5 Июля 2020
Уникальных просмотров
11.173

Оглавление

Для начала рекомендую почитать официальную документацию по модификаторам в Fenom.

Модификаторы Fenom в MODx

Fenom умеет использовать сниппеты MODx в качестве модификаторов. Например, установив компонент dateAgo, вы сразу можете использовать его для вывода дат:

{$_modx->runSnippet('!pdoPage', [
    'parents' => 0,
    'tpl' => '@INLINE <p>{$id} - {$pagetitle} {$createdon | dateago}</p>',
])}

Также работает и Jevix, и любые другие сниппеты-фильтры MODx, которые принимают параметры $input и $options.

{$_modx->runSnippet('!pdoPage', [
    'parents' => 0,
    'includeContent' => 1,
    'tpl' => '@INLINE <p>{$id} - {$pagetitle} {$createdon | dateago} {$content | jevix}</p>',
])}

Модификаторы могут работать последовательно:

{$_modx->runSnippet('!pdoPage', [
    'parents' => 0,
    'includeContent' => 1,
    'tpl' => '@INLINE <p>{$id} - {$pagetitle} {$createdon | date_format:"%Y-%m-%d %H:%M:%S" | dateago}</p>',
])}

Если нужный модификатор не будет найден, то переменная останется как есть, необработанной, и вы получите запись об этом в логе ошибок.

Встроенные модификаторы

В Fenom есть встроенные модификаторы. Модификаторы могут быть применены к переменным, пользовательским функциям или строкам. Для их применения надо после модифицируемого значения указать символ | (вертикальная черта) и название модификатора. Так же модификаторы могут принимать параметры, которые влияют на их поведение. Эти параметры следуют за названием модификатора и разделяются : (двоеточием).

Вот список модификаторов и описание (в скобках указаны равноценные синонимы):

date

Форматирование даты через функцию date. Если переменная пуста, будет получено текущее время.

{'2015-01-10 12:45' | date : 'd.m.Y'} // 10.01.2015
{'' | date : 'Y'} // текущий год

date_format

Форматирование даты через функцию strftime. Если переменная пуста, будет получено текущее время. В модификаторе необходимо использовать конверсионные указатели:

{'2015-01-10 12:45' | date_format : '%d.%m.%Y'} // 10.01.2015
{'' | date_format : '%Y'} // текущий год

escape (e)

Экранирование переменной. Первым параметром принимает режим работы, вторым — кодировку. Используется для кодирования или экранирования спецсимволов по алгоритмам экранирования HTML, URL’ов и Javascript. По умолчанию активирован режим экранирования HTML.

{$text|escape:$type = 'html':$charset = 'UTF8'}

Модификатор поддерживает несколько режимов работы:

{'<p>value</p>' | escape : 'html' : 'utf-8'} // &lt;p&gt;value&lt;/p&gt;
{'http://site.com/?key=value' | escape : 'url'} // http%3A%2F%2Fsite.com%2F%3Fkey%3Dvalue
{['key' => 'value'] | escape : 'js'}

unescape

Декодирование переменной. Модификатор unescape является обратным действием модификатора escape. Так же имеет режимы html, js and URI.

{'&lt;p&gt;value&lt;/p&gt;' | unescape : 'html' : 'utf-8'} // <p>value</p>
{'http%3A%2F%2Fsite.com%2F%3Fkey%3Dvalue' | unescape : 'url'} // http://site.com/?key=value
{'{"key":"value"}' | unescape : 'js'}

truncate (ellipsis)

Обрезает переменную до определенной длинны, по умолчанию — 80 символов. В качестве необязательного второго параметра, вы можете передать строку текста, которая будет отображаться в конце обрезанной переменной. Символы этой строки не включаются в общую длину обрезаемой строки. По умолчанию, truncate попытается обрезать строку в промежутке между словами. Если вы хотите обрезать строку строго на указанной длине, передайте в третий необязательный параметр значение true.

{$long_string|truncate:$length:$etc:$by_words:$middle}
{var $str = 'very very long string'}
{$str | truncate : 10 : ' read more...'} // very very read more...
{$str | truncate : 5 : ' ... ' : true : true} // very ... string

strip

Убирает пробелы в начале и конце текста. Если указан дополнительный параметр, то убираются и все повторяющиеся пробелы в тексте.

{"text     with      spaces"|strip} // text with spaces
{"    multi
    line
    text    "|strip:true} // multi line text

length (len, strlen)

Подсчитывает длину строки, массива, объекта. Может принимать строку или массив.

{'var' | length} // 3
{['key' => 'value'] | len} // 1
{if $images | length > 5}
    to many images
{/if}

count

Подсчитывает количество элементов, например в массиве.

{set $array = [
"foo" => "bar",
"bar" => "foo",
]}
{$array | count} // 2

in

Оператор проверки наличия подстроки в строке или значения в массиве.

{var $key = '10'}
// строка
{if $key | in : 'У меня 10 яблок'}
    Ключ найден
{/if}
// массив + тернарный оператор
{$key | in : [1, 3, 42] ? 'ключ найден' : 'не найден'}

iterable

Проверка возможности перебора переменной.

{var $array = ['key' => 'value']}
{if $array | iterable}
    {foreach $array as $key => $value}
        <p>{$key} is {$value}</p>
    {/foreach}
{/if}

replace

Заменяет все вхождения строки поиска на строку замены.

{$string|replace:$search:$replace}

Возвращает строку, в котором все вхождения $search в $subject заменены на $replace.

{$fruits | replace : "pear" : "orange"} // все pear будут заменены на orange

ereplace

Выполняет поиск и замену по регулярному выражению.

{$string|ereplace:$pattern:$replacement}

Выполняет поиск совпадений в строке $subject с шаблоном $pattern и заменяет их на $replacement.

$replacement может содержать ссылки вида \n, $n или ${n}, причем последний вариант предпочтительней. Каждая такая ссылка будет заменена на подстроку, соответствующую n-ой подмаске. n может принимать значения от 0 до 99, причем ссылка \0 (либо 0 $) соответствует вхождению всего шаблона. Подмаски нумеруются слева направо, начиная с единицы. Для использования обратного слэша, его необходимо продублировать.

{'April 15, 2014' | ereplace : '/(\w+) (\d+), (\d+)/i' : '${1}1, $3'} // April1, 2014

match

Проверяет совпадение строки с паттерном. Среднестатистический пользователь знаком с подстановками оболочки, как минимум с самыми простыми из них — ? и *, так что использование match вместо ematch для поиска в пользовательской части сайта может быть намного удобнее для пользователей, не являющихся программистами.

{$string|match:$pattern}

Специальные символы:

{if $color|match:"*gr[ae]y"}
  какой-то оттенок серого
{/if}

ematch

Выполняет проверку на соответствие регулярному выражению.

{$string|ematch:$pattern}

Ищет в заданном тексте $subject совпадения с шаблоном $pattern.

{if $color|ematch:'/^(.*?)gr[ae]y$/i'}
  какой-то оттенок серого ...
{/if}

split

Разбивает строку и возвращает массив, используя первый параметр в качестве разделителя (по умолчанию — ,).

{$string|split:$delimiter = ','}

Возвращает массив строк, полученных разбиением строки с использованием $delimiter в качестве разделителя.

{var $fruits = 'banana,apple,pear' | split} // ["banana", "apple", "pear"]
{var $fruits = 'banana,apple,pear' | split : ',apple,'} // ["banana", "pear"]

esplit

Разбивает строку по регулярному выражению в первом параметре (по умолчанию /,\s*/).

{$string|esplit:$pattern = '/,\s*/'}
{var $fruits = 'banana, apple, pear' | esplit} // ["banana", "apple", "pear"]
{var $fruits = 'banana; apple; pear' | esplit : '/;\s/'} // ["banana", "apple", "pear"]

join

Объединяет элементы массива в строку, используя первый параметр в качестве соединителя (по умолчанию — ,).

{$array|join:$delimiter = ","}

Объединяет элементы массива с помощью строки $delimiter.

{var $fruits1 = ["banana", "apple", "pear"]}
{$fruits1 | join} // banana, apple, pear
{$fruits1 | join : 'is not'} // banana is not apple is not pear

number (number_format)

Форматирование числа php функцией number_format().

{var $number = 10000}
{$number | number : 0 : '.' : ' '} // выведет 10 000

Функция принимает один, два или четыре аргумента (не три):

{$int|number_format :$number:$decimals:$dec_point:$thousands_sep}

md5, sha1, crc32

Подсчёт контрольной суммы строки разными алгоритмами.

{'text' | md5} // 1cb251ec0d568de6a929b520c4aed8d1
{'text' | sha1} // 372ea08cab33e71c02c651dbc83a474d32c676ea
{'text' | crc32} // 999008199

urldecode, urlencode, rawurldecode

Обработка строки соответствующей PHP функцией.

{'http://site.com/?key=value' | urlencode} // http%3A%2F%2Fsite.com%2F%3Fkey%3Dvalue
{'http%3A%2F%2Fsite.com%2F%3Fkey%3Dvalue' | urldecode} // http://site.com/?key=value

base64_decode, base64_encode

Кодирование и декодирование строки алгоритмом base 64.

{'text' | base64_encode} // dGV4dA==
{'dGV4dA==' | base64_decode} // text

json_encode (toJSON), json_decode (fromJSON)

Кодирование и декодирование JSON.

{'{"key":"value"}' | fromJSON} // ["key" => "value"]
{["key" => "value"] | toJSON} // {"key":"value"}

http_build_query

Генерация URL-кодированной строки из массива.

{['foo'=>'bar','baz'=>'boom'] | http_build_query} // foo=bar&baz=boom

print_r

Распечатка переменной через PHP функцию. Если передан параметр, то можно сохранить результат.

{$printed | print_r}
{var $printed = (['key' => 'value'] | print_r : true)} // Array ( [key] => value )

var_dump (dump)

Распечатка переменной вместе с типом.

{$var | var_dump}

nl2br

Вставляет HTML-код разрыва строки <br> перед каждым переводом строки.

{$content | nl2br}

lower (low, lcase, lowercase, strtolower)

Переводит строку в нижний регистр. Является эквивалентом функции PHP strtolower().

{'Текст для проверки' | lower} // текст для проверки

upper (up, ucase, uppercase, strtoupper)

Переводит строку в верхний регистр. Является эквивалентом функции PHP strtoupper().

{'Текст для проверки' | upper} // ТЕКСТ ДЛЯ ПРОВЕРКИ

ucwords

Преобразует в верхний регистр первый символ каждого слова в строке, а остальные символы в нижний.

{'теКст Для провЕрки' | ucwords} // Текст Для Проверки

ucfirst

Преобразует в верхний регистр первый символ первого слова в строке, а остальные символы в нижний.

{'теКст Для провЕрки' | ucfirst} // Текст для проверки

htmlent (htmlentities)

Преобразует все возможные символы в соответствующие HTML-сущности.

{'<b>Текст для проверки</b>' | htmlent} // &lt;b&gt;Текст для проверки&lt;/b&gt;gt;

limit

Обрезка строки до указанного количества символов.

{'Привет, как дела' | limit : 6} // Привет

esc (tag)

Экранирование HTML и MODx тегов.

{'Привет, [[+username]]' | esc} // тег username не будет обработан

notags (striptags, stripTags, strip_tags)

Удаление HTML тегов из строки.

{'<b>Привет!</b>' | notags} // Привет!

stripmodxtags

Удаление тегов MODx из строки.

{'Привет, [[+username]]' | stripmodxtags} // Привет,

cdata

Оборачивает вывод тегами CDATA. Обычно это нужно для экранирования значений в XML разметке.

{'Тестовый текст' | cdata} // <!--[CDATA[Тестовый текст]]-->

reverse (strrev)

Переворачивает строку символ за символом.

{'mirrortext' | reverse} // txetrorrim

wordwrap

Вставляет перенос строки после каждого n-ого символа (слова не разбиваются).

{'very very long text' | wordwrap : 3} // very<br />very<br />long<br />text

wordwrapcut

Вставляет перенос строки после каждого n-ого символа, даже если этот символ будет внутри слова.

{'very very long text' | wordwrapcut : 3} // ver<br />y<br />ver<br />y<br />lon<br />g<br />tex<br />t

fuzzydate

Выводит дату относительно сегодня и вчера, используя словари системы. Если прошло уже больше 2х дней, то форматирует дату через strftime.

{'2016-03-20 13:15' | fuzzydate : '%d.%m.%Y'} // 20.03.2016
{'' | date : 'Y-m-d 13:15' | fuzzydate} // сегодня в 01:15 PM

declension (decl)

Склоняет слово, следующее за числом по правилам русского языка. Например: 1 яблоко, 2 яблока, 10 яблок. Вторым параметром указывается выводить ли само число, по умолчанию выводится только подходящий вариант слова. Разделитель вариантов можно задавать третьим параметром, по умолчанию |.

{6 | declension : 'яблоко|яблока|яблок'} // яблок
{3 | declension : 'яблоко|яблока|яблок' : true} // 3 яблока
{101 | decl : 'яблоко,яблока,яблок' : false : ','} // яблоко

ismember (memberof, mo)

Проверка принадлежности пользователя к группе или группам пользователей MODx. Если переменная пуста, то проверка проводится для текущего пользователя.

{1 | ismember : 'Administrator'} // true
{0 | ismember : ['Administrator', 'Manager']} // false

isloggedin, isnotloggedin

Проверка авторизации текущего пользователя в контексте. Если контекст не указан, то проверяется текущий.

{'' | isloggedin : 'web'} // true
{'' | isnotloggedin : 'web'} // false

url

Генерация ссылки на документ системы через modX::makeUrl.

{10 | url}
{10 | url : ['scheme' => 'full'] : ['param' => 'value']}

lexicon

Вывод записи из словарей системы через modX:lexicon. Некоторые словари предварительно нужно загрузить.

{$_modx->lexicon->load('en:core:default')}
{'action_err_nfs' | lexicon : ['id' => 25] : 'en'} // No action with 25 found.

user (userinfo)

Вывод поля пользователя системы.

{1 | user : 'fullname'} // Administrator

resource

Вывод поля документа системы. Можно выводить и ТВ параметры.

{1 | resource : 'longtitle'} // Home page
{1 | resource : 'my_tv'} // My_tv value

print

Функция распечатки и экранирования любых переменных. Очень удобно использовать для отладки, когда нужно узнать, что находится внутри. Единственный параметр указывает, нужно ли обернуть данные в тег <pre> (по умолчанию — да).

{$_modx->resource | print} // Распечатает все поля ресурса, включая TV
{1 | resource | print} // Распечатает массив с данными всего ресурса, но без TV
{$_modx->getPlaceholders() | print} // Распечатает все плейсхолдеры ресурса
{0 | user : 'extended' | print : false} // Распечатает массив поля `extended` текущего пользователя в одну строку

setOption

Выставление значения в массив modX:config. Обязательно нужно указать ключ значения в массиве.

{'Новое имя сайта' | setOption : 'site_name'}

option (getOption)

Получение значения из массива modX::config.

{'site_name' | option} // Новое имя сайта

setPlaceholder (toPlaceholder)

Выставление значения в массив modX::placeholders. Обязательно нужно указать ключ значения в массиве.

{'My text' | setPlaceholder : 'my_text'}

placeholder (fromPlaceholder)

Получение значения из массива modX::placeholders.

{'my_text' | placeholder} // My text

cssToHead

Регистрация CSS кода в шапке страницы.

{'assets/css/bootstrap.css' | cssToHead}

htmlToHead

Регистрация произвольного HTML в шапке страницы.

{'<div class="content">some html</div>' | htmlToHead}

htmlToBottom

Регистрация произвольного HTML в подвале страницы.

{'<div class="content">some html</div>' | htmlToBottom}

jsToHead

Регистрация JavaScript файла в шапке страницы. Если передать параметром true, то можно регистрировать сразу код.

{'<script>alert();</script>' | jsToHead : true} // При загрузке страницы будет javascript alert

jsToBottom

Регистрация JavaScript в подвале страницы. Если передать параметром true, то можно регистрировать сразу код.

{'<script>alert();</script>' | jsToBottom : true} // При загрузке страницы будет javascript alert

Для работы функций регистрации скриптов и файлов, на странице должны быть теги head и body.

gettype

Возвращает тип переменной.

{var $int = 123}
{var $float = 1.5}
{var $str = 'test'}
{$int | gettype} // integer
{$float | gettype} // double
{$str | gettype} // string

Другие модификаторы (функции)

Помимо описанных выше, в Fenom присутствую следующие функции:

PCRE модификаторы

Список модификаторов работающих на Perl Compatible Regular Expressions — библиотеке, которая реализует работу регулярных выражений в стиле Perl (с некоторыми отличиями).

preg_quote

Добавляет обратный слеш перед каждым служебным символом. Это бывает полезно, если в составлении шаблона участвуют строковые переменные, значение которых в процессе работы скрипта может меняться в регулярных выражениях служебными считаются следующие символы:

. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

preg_match

Выполняет проверку на соответствие регулярному выражению.

Например, выведем email если соответствует регулярному выражению:

{if 'email@mail.ru'|preg_match : '/^.+@.+\\.\\w+$/' }
email
{/if}

preg_get

Выполняет поиск по регулярному выражению, результат содержит первый набор вхождений.

Например, получим первое изображение из поля content:

{set $image = $_modx->resource.content|preg_get : '!http://.+\.(?:jpe?g|png|gif)!Ui}

preg_get_all

Выполняет поиск по регулярному выражению, результат содержит набор всех вхождений.

preg_grep

Возвращает массив вхождений, которые соответствуют шаблону.

Например, получим только даты:

{["26-04-1974", "Сергей", "27-11-1977", "Юля"] | preg_grep : "/(\d{2})-(\d{2})-(\d{4})/" | print_r : true}

preg_replace

Выполняет поиск и замену по регулярному выражению.

Например, выведем название сайта без http:

Website: {'http://site.name'|preg_replace : '~^https?://~': ''}

preg_filter

Выполняет поиск и замену по регулярному выражению идентична preg_replace за исключением того, что возвращает только те значения, в которых найдено совпадение.

preg_split

Разбивает строку по регулярному выражению.

Например:

{'I love MODX' | preg_split : '/ /' | print_r : true}// Array ( [0] => I [1] => love [2] => MODX )

Благодарность автору

Если по какой-либо причине вы хотите поблагодарить автора данного ресурса, вы можете это сделать одним из удобных для вас способов ниже.

Один из самых популярных способов поблагодарить автора, воспользоваться сервисом Яндекс.Деньги.

Время работы: 0,1509 s
Время запросов: 0,1509 s
Количество запросов: 27
Источник: cache