Фильтры в MODX Revolution позволяют обрабатывать и изменять значения тегов внутри ваших шаблонов, чанков, сниппетах. В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри ядра MODX.
Фильтры вывода
В MODX Revolution фильтры вывода используются как один или нескольких модификаторов вывода, они схожи с PHx вызовами в MODx Evolution, но отличаются тем, что уже изначально встроены в ядро.
Синтаксис модификаторов:[[element:modifier=`value`]]Фильтры могут применяться последовательно (пишутся слева направо):
[[element:modifier=`value`:anothermodifier=`value2`:andanothermodifier:yetanother=`value3`]]Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
[[Snippet:modifier=`value`? &SnippetParam=`something`]]Модификаторы вывода
В таблице представлены некоторые модификаторы и примеры их использования. В примерах они применяются к плейсхолдерам, но вы должны помнить, что модификаторы могут применяться к любым тегам MODX.
Модификатор Описание Пример использования if, input or Объединение нескольких модификаторов связью ИЛИ [[+numProducts:is=`10`:or:is=`11`:then=`Здесь 10 или 11 товаров`:else=`Не уверен, сколько товаров`]] and Объединение нескольких модификаторов связью И isequalto, isequal, equalto, equals, is, eq Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет — «else» [[+numProducts:isequalto=`10`:then=`Здесь 10 товаров`:else=`Не уверен, сколько товаров`]] notequalto, notequals, isnt, isnot, neq, ne Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет — «else» [[+numProducts:notequalto=`10`:then=`Не уверен, сколько товаров`:else=`Здесь 10 товаров`]] greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte То же, только условие «Больше или равно» [[+numProducts:gte=`10`:then=`Здесь 10 товаров или больше`:else=`Здесь меньше 10 товаров`]] isgreaterthan, greaterthan, isgt, gt То же, только условие «Строго больше» [[+numProducts:gt=`10`:then=`Здесь больше 10 товаров`:else=`Здесь 10 товаров или меньше`]] equaltoorlessthan, lessthanorequalto, el, le, islte, lte То же, только условие «Меньше или равно» [[+numProducts:lte=`10`:then=`Здесь 10 товаров или меньше`:else=`Здесь больше 10 товаров`]] islowerthan, islessthan, lowerthan, lessthan, islt, lt То же, только условие «Строго меньше» [[+numProducts:lte=`10`:then=`Здесь меньше 10 товаров`:else=`Здесь 10 товаров или больше`]] hide Скрывает элемент, если условие выполняется [[+numProducts:lt=`1`:hide]] show Отображает элемент, если условие выполняется [[+numProducts:gt=`0`:show]] then Используется для составления условий [[+numProducts:gt=`0`:then=`Товары в наличии!`]] else Используется для составления условий (совместно с «then») [[+numProducts:gt=`0`:then=`Товары в наличии!`:else=`Простите, но все продано.`]] select memberof, ismember, mo Проверяет, является ли пользователь членом указанной группы пользователей 0 Модификаторы для работы со строками
Модификатор Описание Пример использования cat Добавляет значение после тега [[+numProducts:cat=` товаров`]] lcase, lowercase, strtolower Переводит все буквы в нижний регистр [[+title:lcase]] ucase, uppercase, strtoupper Переводит все буквы в верхний регистр [[+longtitle: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=`Привет, [[+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 пользователя isloggedin Возвращает true, если пользователь аутентифицирован в текущем контексте isnotloggedin Возвращает true, если пользователь НЕаутентифицирован в текущем контексте 1 urlencode Конвертирует значение в URL [[+mystring:urlencode]] urldecode Конвертирует значение из URL [[+myparam:urldecode]] Кеширование
В общем случае, содержимое плейсхолдера, которое изменяется динамически, не должно кешироваться.
Например:[[+placeholder:default=`К сожалению, ничего не найдено`]]Результат работы примера может быть пустым, а может и нет. Как мы можем кешировать это? Пример, приведенный выше, отражает природу модификатора вывода.
Возможно применение модификаторов вывода в кешируемом плейсхолдере — но только если Сниппет может быть кеширован. Иначе, мы совершаем алогичное действие — пытаемся кешировать то, что не является статическим содержимым.
Получаем правило: нельзя устанавливать кеширование плейсхолдера в некешируемом сниппете, если результат работы сниппета может изменяться.Использование модификаторов вывода совместно с параметрами
Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:
[[!pdoResources:default=`К сожалению, ничего не найдено`?
&parents=`5`
&depth=`5`
&tpl=`news_tpl`
&includeTVs=`image`
]]Создание пользовательского модификатора
Любой сниппет может использоваться и как модификатор вывода. Для его использования просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет makeExciting, добавляющий к выводу определенное количество восклицательных знаков:
Фильтры ввода-выводаТакой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:
Параметр Значение Значение в примере input Значение элемента В переменной $input будет значение заголовка страницы (Фильтры ввода-вывода) options Значение модификатора (после знака =) $options = 4; token Тип элемента $token = «*«; (символ, определяющий, что данный элемент — поле ресурса name Имя элемента $name = «pagetitle»; tag Весь тег полностью $tag = «Фильтры ввода-вывода«; Модификатор UserInfo
Прямой доступ к данным из таблицы modx_user_attributes в базе данных, с помощью модификаторов вывода вместо сниппетов, может быть достигнуто просто за счет использования модификатора UserInfo.
Выберите нужный столбец из таблицы и укажите его в качестве свойства модификатора, например, так:
Значение Модификатор Внутренний ключ пользователя [[!+modx.user.id:userinfo=`internalKey`]] Логин [[!+modx.user.id:userinfo=`username`]] Полное имя [[!+modx.user.id:userinfo=`fullname`]] Роль [[!+modx.user.id:userinfo=`role`]] [[!+modx.user.id:userinfo=`email`]] Телефон [[!+modx.user.id:userinfo=`phone`]] Мобильный телефон [[!+modx.user.id:userinfo=`mobilephone`]] Факс [[!+modx.user.id:userinfo=`fax`]] Дата рождения [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]] Пол [[!+modx.user.id:userinfo=`gender`]] Страна Область Почтовый индекс Фото Комментарий Пароль Кеш пароля Последняя авторизация Дата текущей авторизации Количество авторизаций [[!+modx.user.id]] возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на 1 или другое поле ресурса или любой плейсхолдер, который возвращает числовое представление ID пользователя.
Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор UserInfo:
[[!+modx.user.id]] — Выведет ID пользователя
[[!+modx.user.username]] — Выведет логин пользователяЛучше всего эти плейсхолдеры вызывать некешируемыми, чтобы избежать неожиданных результатов.
Также фильтры можно использовать несколькими способами (что уменьшает время их выполнения):
// Используем модификатор:
[[+title:lcase]]
[[+something:notempty=`Hello[[+name]]`]]
// Используем сниппет:
[[lcase? &subject=`title`]]
[[notempty? &subject=`something` &then=`Hello[[+name]]`]]
// Используем общий сниппет фильтра:
[[Filter? &subject=`title` &operator=`lcase`]]
[[Filter? &subject=`something` &operator=`notempty` &meter=`Hello [[+name]]`]]
Смотрите также:
Услуги по MODX Revolution
Посмотреть все услуги
Оптимизация сайта
Заказав услуги по технической оптимизации сайта мы избавим вас от ошибок присутствующих на сайте, а так же увеличим скорость работы вашего сайта.
Создание сайта на MODX
Мы создадим для вас такой сайт, который подойдет именно в вашем случае и станет отличным инструментом привлечения клиентов и увеличения продаж.
Перенос сайта на MODX
Работа по переносу сайта на MODX осуществляется в максимально короткие сроки. Стоимость зависит от сложности переносимого сайта
Продвижение сайта на MODX
Если вы хотите получить быстрые и ощутимые результаты, подняться в топ в минимальные сроки, то доверьте нам продвижение своего сайта.