MODX REVO фильтры ввода вывода

20.12.2019 | Андрей
MODX REVO фильтры ввода вывода

Что такое фильтры?

Фильтры в Revolution позволяют управлять способом представления или анализа данных в теге. Они позволяют вам изменять значения внутри ваших шаблонов.

Входной фильтр

Выходной фильтр

В Revolution фильтр вывода применяет один или несколько серий выходных модификаторов, которые ведут себя аналогично вызовам PHx в MODX Evolution - за исключением того, что они встроены в ядро. Синтаксис выглядит так:

[[element:modifier=`value`]]

Они также могут быть прикованы цепью (выполнено слева направо):

[[element:modifier:anothermodifier=`value`:andanothermodifier:yetanother=`value2`]]

Вы также можете использовать их для изменения вывода сниппеты. Обратите внимание, что модификатор идет после имени сниппета и перед знаком вопроса, например:

[[mySnippet:modifier=`value`? &mySnippetParam=`something`]]

Если у вас есть более длинный код :then=:else= оператор, и вы хотите сделать его более читабельным, поместив его в несколько строк, это должно быть сделано так:

[[+placeholder:is=`0`:then=`
 // code
`:else=`
 // code
`]]

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

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

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

Модификатор Описание Пример
if, input if, input -
or Может использоваться для вывода выходных модификаторов вместе с отношением «OR». Не уверен, сколько книг
and Может использоваться для вывода выходных модификаторов вместе с отношением «AND».
isequalto, isequal, equalto, equals, is, eq Сравнивает с переданным значением и продолжает, если оно такое же. Используется с "then" и "else" Не уверен, сколько книг
notequalto, notequals, isnt, isnot, neq, ne Сравнивает с переданным значением и перемещается, если оно не совпадает. Используется с "then" и "else" Не уверен, сколько книг
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte Сравнивает с переданным значением и продолжает, если оно больше или равно значению. Используется с "then" и "else". Есть менее 5 книг
isgreaterthan, greaterthan, isgt, gt Сравнивает с переданным значением и продолжает, если оно больше, чем значение. Используется с "then" и "else". Есть менее 5 книг
equaltoorlessthan, lessthanorequalto, el, le, islte, lte Сравнивает с переданным значением и продолжает, если оно меньше или равно значению. Используется с "then" и "else". Есть 5 или менее 5 книг
islowerthan, islessthan, lowerthan, lessthan, islt, lt Сравнивает с переданным значением и продолжает, если оно меньше значения. Используется с "then" и "else". Есть менее 5 книг
contains Проверяет, содержит ли значение переданную строку.
containsnot Проверьте, не содержит ли значение переданную строку. Somebody Else
in, IN, inarray, inArray Проверьте, находится ли значение в массиве (через запятую)
hide Проверяет более ранние условия и скрывает элемент, если условия были выполнены.
show Проверит более ранние условия и покажет элемент, если условия были выполнены.
then Условное использование.
else Условное использование вместе с потом. Sorry, currently sold out.
select Выведите замену, если значение находится в списке значений перед знаком равенства. В противном случае результат будет пустым.
memberof, ismember, mo Проверяет, является ли пользователь членом указанной группы (групп). 0

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

Модификатор Описание Пример
cat Добавляет значение параметра (если оно не пустое) к входному значению books
after, append Добавляет значение параметров к входному значению (если оба не пустые). Добавлен в 2.6.0.
before, prepend Добавляет значение параметров к входному значению (если оба не пустые). Добавлен в 2.6.0.
lcase, lowercase, strtolower Преобразует строки в нижний регистр. Похож на PHP strtolower
ucase, uppercase, strtoupper Преобразует строки в верхний регистр. Похож на PHP strtoupper
ucwords Преобразует первую букву слова в верхний регистр. Похож на PHP ucwords
ucfirst Преобразует первую букву строки в верхний регистр. Похож на PHP ucfirst
htmlent, htmlentities Замените любой символ, имеющий HTML-сущность, этой сущностью. Похож на PHP htmlentities. Uses the current value the system setting modx_charset with flag ENT_QUOTES
esc,escape Безопасно экранирует значения символов, используя регулярные выражения и str_replace. Также убирает [, ] и
strip Заменить все разрывы строк, табуляции и несколько пробелов одним пробелом
stripString Удаляет строку указанного значения
stripmodxtags Удаляет теги MODX из ввода. (Добавлено в v2.7)
replace Заменяет одно значение другим
striptags, stripTags,notags,strip_tags Удаляет HTML-теги из ввода. Опционально принимает значение, чтобы указать, какие теги разрешить. Похож на PHP strip_tags
len,length, strlen Подсчитывает длину пропущенной строки. Похож на PHP strlen 0
reverse, strrev Обращает ввод, символ за символом. Похож на PHP strrev
wordwrap Вставка символа новой строки после установленного количества символов. Похож на PHP wordwrap. Takes optional value to set wordwrap position.
wordwrapcut Вставляет символ новой строки после заданного количества символов, независимо от границ слова. Похож на PHP wordwrap, с включенным сокращением слова. Принимает необязательное значение для установки положения переноса слов.
limit Ограничивает строку определенным количеством символов. По умолчанию 100.
ellipsis Добавляет многоточие и усекает строку, если она длиннее определенного количества символов. В качестве контрольных точек используются только пробелы. По умолчанию 100.
tag Отображает необработанный элемент без :tag. Полезно для документации. [[+showThis]]
tvLabel Отображает метку с телевизора, полезную при использовании выбора или флажки и т.д., Где вы используете Label==1||Otherlabel==2||More options==3 если значение 2 вернет Otherlabel.
math Возвращает результат расширенного расчета (Не рекомендуется) Удалено в Revolution 2.2.6. 21
add,increment,incr Возвращает входные данные, увеличенные на параметр (по умолчанию: +1) 1
subtract,decrement,decr Возвращает входные данные, уменьшенные на параметр (по умолчанию: -1) -1
multiply,mpy Возвращает входные данные, умноженные на параметр (по умолчанию: *2) [[+trifecta:mpy=`3`]
divide,div Возвращает входные данные, разделенные на опции (по умолчанию: /2) Не принимает 0. [[+rating:div=`4`]]
modulus,mod Возвращает модуль параметра на входе (по умолчанию: %2, возвращает 0 или 1) [[+number:mod]] или [[+number:mod=3]]
ifempty,default,empty, isempty Возвращает входное значение, если оно пустое [[+name:default=`anonymous`]]
notempty, !empty, ifnotempty, isnotempty Возвращает входное значение, если оно не пустое [[[[+name:notempty=`Hello `[[+name]]`!`]]
nl2br Преобразует символ новой строки (\n) в HTML
element. Используйте это, если вы принимаете ввод, вы думаете, что в нем должны быть новые строки, а их нет. Похож на PHP nl2br. [[+textfile:nl2br]]
date Форматирует временную метку Unix в другой формат. Похож на PHP strftime. Значение это формат. Посмотрите Форматы даты. [[+birthyear:date=`%Y`]]
strtotime Преобразует строку даты в метку времени Unix. Полезно сочетать это с выходным фильтром даты. Похож на PHP strtotime. Takes in a date. Посмотрите Форматы даты. [[+thetime:strtotime]]
fuzzydate Возвращает симпатичный формат даты со вчерашним и сегодняшним фильтрованием. Берет в свидание. [[+createdon:fuzzydate]]
ago Возвращает красивый формат даты в секундах, минутах, неделях или месяцах назад. Берет на свидание (strtotime). [[+createdon:date=`%d-%m-%Y`:ago]]
md5 Создает хеш MD5 для входной строки. Похож на PHP md5. [[+password:md5]]
cdata Обтекание текста тегами CDATA [[+content:cdata]]
userinfo Возвращает запрошенные данные пользователя. Элемент должен быть идентификатором modUser. Поле значения - это столбец для захвата, например: fullname, email. Смотрите примеры ниже. [[+modx.user.id:userinfo=`username`]]
isloggedin Возвращает true, если пользователь аутентифицирован в этом контексте. [[+modx.user.id:isloggedin]]
isnotloggedin Возвращает true, если пользователь не аутентифицирован в этом контексте. [[+modx.user.id:isnotloggedin]]
toPlaceholder Помещает введенное значение в переданный плейсхолдер. Не мешает вывод значения TV, поэтому добавьте [[*someTV:toPlaceholder=`placeholder`:notempty=``]] если вы не хотите выводить значение самого TV. [[*someTV:toPlaceholder=`placeholder`]]
cssToHead Поместите элемент <link> в , где входное значение находится внутри атрибута href.
Uses modX.regClientCSS. [[+cssTV:cssToHead]]
htmlToHead Вставьте блок HTML-кода в заголовок страницы, прежде чем </head>.
Uses modX.regClientStartupHTMLBlock [[+htmlTV:htmlToHead]]
htmlToBottom Вставьте HTML-код в конце страницы перед </body>. Использовать modX.regClientHTMLBlock. [[+htmlTV:htmlToBottom]]
jsToHead Вставьте код JS (или ссылку) в заголовок страницы перед </head>. Использовать modX.regClientStartupScript. [[+jsTV:jsToHead]]
jsToBottom Вставьте код JS (или ссылку) в конце страницы перед </body>. Использовать modX.regClientScript. [[+jsTV:jsToBottom]]
urlencode Преобразует ввод в строку, удобную для URL, аналогично тому, как это делает форма HTML. Похож на PHP urlencode [[+mystring:urlencode]]
urldecode Преобразует входные данные из строки, удобной для URL, аналогично PHP urldecode [[+myparam:urldecode]]
filterPathSegment Добавлено в 2.7. Преобразует ввод в удобную для URL строку с тем же механизмом, который превращает заголовок страницы в псевдоним, включая транслитерацию, если она включена. Полезно для пользовательских URL. [[+pagetitle:filterPathSegment]]

Кэширование

Как правило, любой контент в заполнителе, который, по вашему мнению, может изменяться динамически, должен быть кэширован. Например:

[[+placeholder:default=`A default value!`]]

Это означает, что может иногда быть пустым, а иногда нет. Почему вы хотите, чтобы это кэшировалось? Это исключило бы точку модификатора вывода.

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

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

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

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

[[!getResources:default=`Sorry - nothing matched your search.`?
    &tplFirst=`blogTpl`
    &parents=`2,3,4,8`
    &tvFilters=`blog_tags==%[[!tag:htmlent]]%`
    &includeTVs=`1`
]]

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

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

[[*pagetitle:makeExciting=`4`]]

Этот вызов переменной документа с модификатором вывода передаст эти свойства в сниппет:

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

Вот пример реализации для нашего сниппета makeExciting:

$defaultExcitementLevel = 1;
$result = $input;
if (isset($options)) {
    $numberOfExclamations = $options;
} else {
    $numberOfExclamations = $defaultExcitementLevel;
}
for ( $i = $numberOfExclamations; $i > 0; $i-- ) {
    $result = $result . '!';
}
return $result;

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

Исходное входное значение будет возвращено, если сниппет возвращает пустую строку.

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

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

[[+mydate:strtotime:date=`%Y-%m-%d`]]

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

User Internal Key: [[!+modx.user.id:userinfo=`internalKey`]]<br />
User name: [[!+modx.user.id:userinfo=`username`]]<br />
Full Name: [[!+modx.user.id:userinfo=`fullname`]]<br />
Role:  [[!+modx.user.id:userinfo=`role`]]<br />
E-mail: [[!+modx.user.id:userinfo=`email`]]<br />
Phone: [[!+modx.user.id:userinfo=`phone`]]<br />
Mobile Phone: [[!+modx.user.id:userinfo=`mobilephone`]]<br />
Fax: [[!+modx.user.id:userinfo=`fax`]]<br />
Date of birth: [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]<br />
Gender: [[!+modx.user.id:userinfo=`gender`]]<br />
Country: [[+modx.user.id:userinfo=`country`]]<br />
State: [[+modx.user.id:userinfo=`state`]]<br />
Zip Code: [[+modx.user.id:userinfo=`zip`]]<br />
Photo: [[+modx.user.id:userinfo=`photo`]]<br />
Comment: [[+modx.user.id:userinfo=`comment`]]<br />
Password: [[+modx.user.id:userinfo=`password`]]<br />
Cache Password: [[+modx.user.id:userinfo=`cachepwd`]]<br />
Last Login: [[+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]]<br />
The Login:[[+modx.user.id:userinfo=`thislogin`:date=`%Y-%m-%d`]]<br />
Number of Logins: [[+modx.user.id:userinfo=`logincount`]]

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

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

[[!+modx.user.id]] - Prints the ID
[[!+modx.user.username]] - Prints the username

Скорее всего, вы захотите вызывать их без кэширования (см. Примечание о кэшировании выше), чтобы предотвратить неожиданные результаты.

Смотрите также

Бажаєте дізнатись скількі коштує Ваш проєкт?

Заповніть заявку

Категорії

Те, що читають:

Name post

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco

Name post

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco

[[!pdoCrumbs? &showHome=`1` &tplWrapper=`btplwrapper` &tplHome=`btplhome` &tplCurrent=`btplcurrent` &tpl=`btpl` &hideSingle=`1` ]]