Модификаторы
Условные модификаторы вывода
Модификатор | Описание | Пример использования |
---|---|---|
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 |
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=`
— в данном случае умножаем на 1,2 и округляем: 0 означает количество знаков после запятой.[ [+tv.price]]
`:mpy=`1.2`:round=`0`]]