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

Условные модификаторы вывода

Модификатор Описание Пример использования
if, input    
or Объединение нескольких модификаторов связью ИЛИ [ [+numbooks:is=`5`:or:is=`6`:then=`Здесь 5 или 6 книг`:else=`Не уверен, сколько книг`]]
and Объединение нескольких модификаторов связью И  
isequalto, isequal, equalto, equals, is, eq Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет - «else» [ [+numbooks:isequalto=`5`:then=`Здесь 5 книг`:else=`Не уверен, сколько книг`]]
notequalto, notequals, isnt, isnot, neq, ne Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет - «else» [ [+numbooks:notequalto=`5`:then=`Не уверен, сколько книг`:else=`Здесь 5 книг`]]
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte То же, только условие «Больше или равно» [ [+numbooks:gte=`5`:then=`Здесь 5 книг или больше`:else=`Здесь меньше пяти книг`]]
isgreaterthan, greaterthan, isgt, gt То же, только условие «Строго больше» [ [+numbooks:gt=`5`:then=`Здесь больше пяти книг`:else=`Здесь 5 книг или меньше`]]
equaltoorlessthan, lessthanorequalto, el, le, islte, lte То же, только условие «Меньше или равно» [ [+numbooks:lte=`5`:then=`Здесь 5 книг или меньше`:else=`Здесь больше пяти книг`]]
islowerthan, islessthan, lowerthan, lessthan, islt, lt То же, только условие «Строго меньше» [ [+numbooks:lte=`5`:then=`Здесь меньше пяти книг`:else=`Здесь 5 книг или больше`]]
hide Скрывает элемент, если условие выполняется [ [+numbooks:lt=`1`:hide]]
show Отображает элемент, если условие выполняется [ [+numbooks:gt=`0`:show]]
then Используется для составления условий [ [+numbooks:gt=`0`:then=`Книги в наличии!`]]
else Используется для составления условий (совместно с «then») [ [+numbooks:gt=`0`:then=`Книги в наличии!`:else=`Простите, но все продано.`]]
select    
memberof, ismember, mo Проверяет, является ли пользователь членом указанной группы пользователей [ [+modx.user.id:memberof=`Administrator`]]

Модификаторы для работы со строками

Модификатор Описание Пример использования
cat Добавляет значение после тега [ [+numbooks:cat=` книг`]]
lcase, lowercase, strtolower Переводит все буквы в нижний регистр [ [+title:lcase]]
ucase, uppercase, strtoupper Переводит все буквы в верхний регистр [ [+headline:ucase]]
ucwords Делает первую букву в словах заглавной [ [+title:ucwords]]
ucfirst Делает первую букву в строке заглавной [ [+name:ucfirst]]
htmlent, htmlentities Преобразует все символы в HTML-сущности [ [+email:htmlent]]
esc,escape Безопасно экранирует символы, используя регулярные выражения и str_replace. Также экранирует символы [, ] и ` [ [+email:escape]]
strip Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом [ [+textdocument:strip]]
stripString Вырезает из строки указанную подстроку [ [+name:stripString=`Mr.`]]
replace Производит замену подстрок [ [+pagetitle:replace=`Mr.==Mrs.`]]
striptags, stripTags,notags,strip_tags Вырезает все теги (можно указать разрешенные теги).
Не используйте для обеспечения безопасности.
[ [+code:strip_tags=`<p>`]]
len,length, strlen Выводит длину строки [ [+longstring:strlen]]
reverse, strrev Переворачивает строку символ за символом [ [+mirrortext:reverse]]
wordwrap Вставляет перенос строки после каждого n-ого символа (слова не разбиваются) [ [+bodytext:wordwrap=`80`]]
wordwrapcut Вставляет перенос строки после каждого n-ого символа, даже если этот символ будет внутри слова [ [+bodytext:wordwrapcut=`80`]]
limit Выводит определенное количество символов с начала строки (значение по умолчанию - 100) [ [+description:limit=`50`]]
ellipsis Добавляет многоточие и обрезает строку, если она длиннее, чем определенное количество символов (значение по умолчанию - 100) [ [+description:ellipsis=`50`]]
tag Экранирование. Отображает элемент так как он есть, без :tag. Для использования в документации [ [+showThis:tag]]
math Возвращает результат продвинутых вычислений (нагружает на процессор. Не рекомендуется)  
add,increment,incr Прибавляет указанное число (значение по умолчанию +1) [ [+downloads:incr]]
[ [+blackjack:add=`21`]]
subtract,decrement,decr Вычитает указанное число (значение по умолчанию -1) [ [+countdown:decr]]
[ [+moneys:subtract=`100`]]
multiply,mpy Умножает на указанное число (значение по умолчанию *2) [ [+trifecta:mpy=`3`]]
divide,div Делит на указанное число (значение по умолчанию /2) [ [+rating:div=`4`]]
modulus,mod Возвращает модуль числа
(по-умолчанию: %2, возвращает 0 или 1) )
[ [+number:mod]]
ifempty,default,empty, isempty Возращает значение модификатора, если значение тега пусто [ [+name:default=`anonymous`]]
notempty, !empty, ifnotempty, isnotempty Возращает значение модификатора, если значение тега НЕпусто [ [+name:notempty=`Hello [ [+name]]!`]]
nl2br Заменяет символы новой строки (\n) на HTML-тег <br /> [ [+textfile:nl2br]]
date Переводит таймстамп в текст, в соответствии с указанным форматом (Формат даты) [ [+birthyear:date=`%Y`]]
strtotime Переводит дату в виде текста в UNIX таймстамп [ [+thetime:strtotime]]
fuzzydate Возвращает дату в формате "вчера, сегодня...". Принимает значение даты. [ [+createdon:fuzzydate]]
ago Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. [ [+createdon:ago]]
md5 Создает MD5-хеш значения [ [+password:md5]]
cdata Оборачивает вывод тегами CDATA [ [+content:cdata]]
userinfo Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя [ [+modx.user.id:userinfo=`username`]]
isloggedin Возвращает true, если пользователь аутентифицирован в текущем контексте [ [+modx.user.id:isloggedin]]
isnotloggedin Возвращает true, если пользователь НЕаутентифицирован в текущем контексте [ [+modx.user.id:isnotloggedin]]
urlencode Конвертирует значение в URL [ [+mystring:urlencode]]
urldecode Конвертирует значение из URL [ [+myparam:urldecode]]

Кеширование

В общем случае, содержимое плейсхолдера, которое изменяется динамически, не должно кешироваться. Например:

Результат работы примера может быть пустым, а может и нет. Как мы можем кешировать это? Пример, приведенный выше, отражает природу модификатора вывода.
Возможно применение модификаторов вывода в кешируемом плейсхолдере - но только если Сниппет может быть кеширован. Иначе, мы совершаем алогичное действие - пытаемся кешировать то, что не является статическим содержимым.
Получаем правило: нельзя устанавливать кеширование плейсхолдера в некешируемом сниппете, если результат работы сниппета может изменяться.

Использование модификаторов вывода совместно с параметрами

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

Создание пользовательского модификатора

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

Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:

Параметр Значение Значение в примере
input Значение элемента В переменной $input будет значение заголовка страницы ([ [*pagetitle]])
options Значение модификатора (после знака =) $options = 4;
token Тип элемента $token = "*"; (символ, определяющий, что данный элемент - поле ресурса
name Имя элемента $name = "pagetitle";
tag Весь тег полностью $tag = "[ [*pagetitle:makeExciting=`4`]]";

Цепочки фильтров (Множественные модификаторы)

Хорошим примером цепочки фильтров будет форматирование даты, например, так:

Модификатор UserInfo

Прямой доступ к данным из таблицы modx_user_attributes в базе данных, с помощью модификаторов вывода вместо сниппетов, может быть достигнуто просто за счет использования модификатора UserInfo. Выберите нужный столбец из таблицы и укажите его в качестве свойства модификатора, например, так:

[ [!+modx.user.id]] возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на [ [*createdby]] или другое поле ресурса или любой плейсхолдер, который возвращает числовое представление ID пользователя.

Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор UserInfo:

[ [!+modx.user.id]] - Выведет ID пользователя

[ [!+modx.user.username]] - Выведет логин пользователя

Округлить число. Сниппет round:

<?php
return round(floatval($input),intval($options));

Вызов:

[ [+price:decr=`[ [+tv.price]]`:mpy=`1.2`:round=`0`]] — в данном случае умножаем на 1,2 и округляем: 0 означает количество знаков после запятой.