Фільтри phx та модифікатори. Універсальний фільтр ресурсів Фільтри модифікатори

Головна / Google Play

І так, фільтр, який ви зможете собі зробити на сайт дуже універсальний!
Його можна буде застосувати до будь-якого проекту і при цьому заощадивши багато часу

Спочатку необхідно встановити пакет pdoResources, який входить до складу пакету pdoTools. Ви можете встановити весь набір пакетів pdo (pdoTools) або тільки pdoResources окремим пакетом для створення фільтра на MODx Revolution.

Після встановлення пакетів, давайте підключимо сніпет, який ви завантажили з GitHub у ваш проект. Якщо ви розробляєте каталог зараз з нуля, то раджу дотримуватись використання певних класів для Ajax фільтрації.

Однак якщо у вас вже готовий каталог, ви можете визначити класи елементів Ajax фіьтра в JS файлі (див. нижче).

Зверніть увагу, що. ajax-item має бути безпосереднім нащадком. ajax-container. Якщо ви використовуєте сітку Bootstrap для розмітки колонок, можете визначити клас контейнера як "row ajax-container", а колонки айтему як "col-md-4 ajax-item".

Підключення JS скрипта Ajax фільтра

Підключимо скрипт JS до проекту. Ви можете підключити його як окремим файлом, так і безпосередньо до файлу кастомних скриптів проекту. Для роботи скрипта потрібний jQuery.

$(function() ( //MODx pdoResources Ajax Filter //Filter Settings var fadeSpeed ​​= 200, // Fade Animation Speed ​​ajaxCountSelector = ".ajax-count", // CSS Selector of Items Counter ajaxContainerSelector = ".ajax-container" , // CSS Selector of Ajax Container ajaxItemSelector = ".ajax-item", // CSS Selector of Ajax Item ajaxFormSelector = ".ajax-form", // CSS Selector Ajax Filter Form ajaxFormButtonStart = ".ajax-start", // CSS Selector of Button Start Filtering ajaxFormButtonReset = ".ajax-reset", // CSS Selector of Button Reset Ajax Form sortDownText = "За спаданням", sortUpText = "За зростанням"; function ajaxCount() ( if($(" .ajax-filter-count").length) ( var count = $(".ajax-filter-count").data("count"); $(ajaxCountSelector).text(count); ) else ( $(ajaxCountSelector ).text($(ajaxItemSelector).length); ) )ajaxCount(); response = $(response);$(ajaxCont ainerSelector).fadeOut(fadeSpeed); setTimeout(function() ( $(ajaxContainerSelector).html($response.find(ajaxContainerSelector).html()).fadeIn(fadeSpeed); ajaxCount(); ), fadeSpeed); )); ) $(ajaxContainerSelector).on("click", ".ajax-more", function(e) ( e.preventDefault(); var offset = $(ajaxItemSelector).length; $.ajax(( data: $(ajaxFormSelector) ).serialize()+"&offset="+offset )).done(function(response) ( $(".ajax-more").remove(); var $response = $(response); $response.find( $(ajaxContainerSelector).append($response.find(ajaxContainerSelector).html()); $(ajaxItemSelector).fadeIn(); )); )) $(ajaxFormButtonStart).click(function( e) ( e.preventDefault(); ajaxMainFunction(); )) $(ajaxFormButtonReset).click(function(e) ( e.preventDefault(); $(ajaxFormSelector).trigger("reset"); $("input" ).val("pagetitle"); $("input").val("asc"); setTimeout(function() ( $(")).data("sort-dir", "asc").toggleClass( "button-sort-asc").text(sortUpText); ), fadeSpeed), ajaxMainFunction(); ajaxCount(); )) $("").data("sort-dir", "asc").click(function() ( var ths = $(this) ); $("input").val($(this).data("sort-by")); $("input").val($(this).data("sort-dir")); setTimeout(function() ( $("").not(this).toggleClass("button-sort-asc").text(sortUpText); ths.data("sort-dir") == "asc" ? ths .data("sort-dir", "desc").text(sortDownText) : ths.data("sort-dir", "asc").text(sortUpText); $(this).toggleClass("button-sort -asc "); ), fadeSpeed); ajaxMainFunction(); )); ));

  • Рядки 5-13: визначення змінних для CSS селекторівФільтр Ajax. Не змінюємо, якщо використовуємо стандартні значення, як у малюнку вище;
  • Рядки 15-22: скрипт лічильника ресурсів у результатах фільтрації;
  • Рядки 24-35: основна функція Ajax фільтрації;
  • Рядки 37-49: обробник події на кліку на кнопку «Завантажити ще»;
  • Рядки 51-54: обробник події на кліку на кнопці «фільтрувати». Ця кнопка може бути відсутній, оскільки фільтрація відбувається автоматично.
  • Автоматична фільтрація може бути вимкнена шляхом видалення рядків 68-70;
  • Рядки 56-66: обробник події очищення форми та скидання фільтра. Рядки 59-63 відповідають за скидання параметрів сортування;
  • Рядки 68-70: функція автоматичного сортування за зміни полів форми фільтра;
  • Рядки 72-82: універсальна функція сортування за параметром tv.

Підключення PHP сніпету в MODx Revolution

Створіть новий сніпет в панелі керування MODx catalogFilter і заповніть його наступним вмістом:
=".$_GET["area_from"]; ) if($_GET["area_to"]) ( $filter = "area<=".$_GET["area_to"]; } //Checkbox Type if($_GET["garage"]) { $filter = "garage=1"; } //End Settings //Sort if($_GET["sortby"]) { $sortby = $_GET["sortby"]; } else { $sortby = "pagetitle"; } if($_GET["sortdir"]) { $sortdir = $_GET["sortdir"]; } else { $sortdir = "asc"; } //End Sort //Offset $offset = 0; if($_GET["offset"]){ $offset = $_GET["offset"]; } if($filter) { $where = $modx->доJSON(array($filter)); ) else ( $where = ""; ) $params_count = array("parents" => $parents, "limit" => 0, "tpl" => "@INLINE ,", "select" => "id", "includeTVs" => $fields, "showHidden" => "1", "where" => $where); $count = $modx->runSnippet("pdoResources",$params_count); $count = count(explode(",",$count))-1; $modx->setPlaceholder("count",$count); $params = array("parents" => $parents, "limit" => $limit, "offset" => $offset, "tpl" => $tpl, "select" => "id,pagetitle,introtext,content ", "includeTVs" => $fields, "showHidden" => "1", "sortby" => $sortby, "sortdir" => $sortdir, "where" => $where); $more = $count - $offset - $limit; $lim = $more > $limit? $limit: $more; $button = ""; if($more > 0)( $button = "
Завантажити ще ".$lim." з ".$more."
"; ) return $modx->runSnippet("pdoResources",$params).$button;

Між коментарями //Filter Fields Settings та //End Settings знаходяться параметри, які необхідно відредагувати під свій проект. Тут нічого складного, просто прописуєте name полів input і перевіряєте їх умовою if. Для полів типу Radio, Select та Text використовуємо приклад із рядків 5-8. Для визначення проміжного значення від і до можна скористатися прикладом рядків 11-16. Для чекбоксів підійде приклад із рядків 19-21.

У рядку 74 сніппета ви можете задати свої класи, але не видаляйте поточну розмітку, оскільки вона бере участь у скриптах для навантаження контенту.

Приклад можливих значень панелі керування MODx для радіокнопок: Перший==1||Другий==2||Третій==3

Приклад виведення радіокнопок на фронтенд:

Тут найменування name=«floor» відповідає рядкам 6-8 нашого сніпету catalogFilter. Аналогічно реалізовано обробку інших полів форми. Я думаю, це зрозуміло і створення власних полів не буде для вас проблемою.

Виведення сніпету здійснюється в шаблоні каталогу таким чином:

[[!catalogFilter? &tpl=`tplCatItem` &limit=`3` &parents=`5` &fields=`image,area,floor,garage,price` ]]

  • tpl=`tplCatItem` - чанк айтема у списку каталогу;
  • limit=`3` - Скільки записів виводити і скільки записів підвантажувати при кліку на кнопці «Завантажити ще»;
  • parents=`5` - вказуємо id документа для каталогу ресурсів;
  • fields=`image,area,floor,garage,price` - перераховуємо TV's, які необхідно показати у чанці tplCatItem і які необхідно обробляти при фільтрації.
Приклад чанка tplCatItem

[[+pagetitle]]

[[+tv.area:isnot=``:then=` `]]
Поверх [[+tv.floor]]
Площа [[+tv.area]] кв.м.
Гараж [[+tv.garage:is=`1`:then=`Є`:else=`Ні`]]
Ціна: [[+tv.price]]

Ajax сортування по TV
У нашому скрипті є готове рішення для сортування результатів фільтрації по будь-якому полю TV. У форму фільтра вставте наступні приховані поля і не змінюйте їх значення, вони просто повинні бути у формі фільтра:

У будь-якому місці вашого HTML шаблону зробіть висновок кнопки і в data атрибуті вкажіть поле, яким хочете фільтрувати видачу:

Сортувати за ціною:

При натисканні торкається клас button-sort-asc, який можете використовувати для оформлення кнопки при зміні напряму сортування, додавання стрілочок і т. д. в атрибут data-sort-by можна писати будь-який TV, що бере участь у фільтрації. Із сортуванням все.

Отже, ми розглянули створення нескладного Ajax фільтру ресурсів в MODx з виведенням результатів у сніпеті pdoResources.

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

Фільтри введення

В даний час фільтри введення використовуються при підготовці до обробки виводу фільтрів. Зазвичай вони використовуються лише усередині ядра MODX.

Фільтри виводу

У MODX Revolution фільтри виведення використовуються як один або кілька модифікаторів виведення, вони схожі з PHx викликами MODx Evolution, але відрізняються тим, що вже спочатку вбудовані в ядро.

Синтаксис модифікаторів:

[[+element:modifier=`value`]]

Фільтри можуть застосовуватися послідовно (пишуться зліва направо):

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

Також фільтри можуть застосовуватися для модифікації виведення сніпетів. Фільтр потрібно прописувати перед усіма параметрами (перед знаком питання):

Модифікатори виводу

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

Модифікатор Опис Приклад використання
if, input if - задає додаткову умову, input - додає тег оброблювані дані [[+num:is=`10`:and:if=`[[+num]]`:ne=`15`:then=`Так, дорівнює 10 і не 15`]]
or, and Об'єднання кількох модифікаторів зв'язком АБО, та зв'язком І [[+numProducts:is=`10`:or:is=`11`:then=`Тут 10 або 11 товарів`:else=`Не впевнений, скільки товарів`]]
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=`Пробачте, але все продано.`]]
memberof, ismember, mo Перевіряє, чи є членом зазначеної групи користувачів [[+modx.user.id:memberof=`Administrator`]]

Модифікатори для роботи з рядками

Модифікатор Опис Приклад використання
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=`
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-тег
[[+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, що додає до висновку певну кількість знаків оклику:

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

Такий виклик тега передасть у сніпет makeExciting наступні параметри для обробки:

Модифікатор 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`]]
E-mail [[!+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:userinfo=`country`]]
Область [[+modx.user.id:userinfo=`state`]]
Поштовий індекс [[+modx.user.id:userinfo=`zip`]]
Фото [[+modx.user.id:userinfo=`photo`]]

Сьогодні корисна стаття про фільтри phx та їх модифікатори MODX Revo за допомогою яких ви зможете прямо всередині шаблонів, маніпулювати значенням різних тегів.

Навіщо вони потрібні?

phx модифікатори полегшують життя modx розробникам. Допустимо у нас є сайт з каруселлю зображень (ну або з банером), який потрібно виводити лише на головній сторінці. Для цього достатньо помістити його в окремий чанк і вивести в шаблоні за допомогою такої конструкції

Де: 1 - id головної сторінки,
$carusel- Чанк з кодом каруселі (банера).
Тільки повні чайники створюють новий шаблон для декількох рядків коду каруселі. Я теж таким був, загалом не впадаємо у відчай і впроваджуємо phx в розробку.

Розберемо вищенаведену конструкцію докладніше:

[[*id:is=`1`:then=`[[$carusel]]`]]

*id- Виводить id поточної сторінки;

:is=`1`:then=

— перевіряє чи *id == 1? і якщо одно, то виводиться вміст then;
$carusel- Виводить чанк carusel.

Замість *id, можна використовувати й інші поля, наприклад *template - виведе поточний шаблон. Або можна перевіряти заповнене чи ні TV-поле (нехай буде *keywords) і якщо воно заповнене, то виводити його. Розберемо цей випадок детальніше. Дано стандартну розмітку:

Завдання:не виводити цей рядок, якщо TV keywords не заповнено.
Рішення.

[[*keywords:!empty=` `]]

Навантаження

Потрібно стежити за обробкою модифікаторів, бездумне їхнє використання викличе зайві навантаження. Повернемося до каруселі, цей запис зчитується зліва направо і МОДХ виконує всі вкладені умови, незалежно від того, вірна умова чи ні, чи виводиться на поточній сторінці вміст [[$carusel]], у будь-якому випадку його вміст обробиться. У зв'язку з цим доцільніше переписати запис:

[[$caru[[*id:is=`1`:then=`sel`]]]]

У цьому випадку вміст чанка $carusel, буде оброблено у разі, якщо виконується умова

*id:is=`1`

т.к. виконується

[[*id:is=`1`:then=`sel`]]

і якщо id поточної сторінки дорівнює 1, останнє обробляється [[$carusel]]якщо id не дорівнює 1, тоді - [[$caru]]. А якщо чанка $caru- немає в елементах, то й навантаження не буде.

А взагалі ідеальний висновок виглядатиме так.

[[$[[*id:is=`1`:then=`carusel`]]]]

Про те, як правильно інтегрувати верстку в modx revo рекомендую почитати тут.

Примітка! Ви можете комбінувати скільки завгодно модифікаторів під логіку роботи компонентів сайту, але головне пам'ятайте їх основна суть. полегшити розробку, а чи не ускладнювати без того складні завдання. Зазвичай, найефективніший і найдієвіший спосіб — це найпростіший, оскільки чим простіше і зрозуміліша конструкція — тим легше з нею працюватиме надалі. Нижче наведено основні модифікатори, які можна використовувати для будь-якого тега МОДХ Рево.

Ланцюжки модифікаторів

Хорошим прикладом побудови ланцюжка буде форматувати рядок дати в інший формат, наприклад, так:

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

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

Внутрішній ключ користувача: [[!+modx.user.id:userinfo=`internalKey`]] Логін: [[!+modx.user.id:userinfo=`username`]] Повне ім'я: [[!+modx.user .id:userinfo=`fullname`]] Роль: [[!+modx.user.id:userinfo=`role`]] E-mail: [[!+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:userinfo=`country`]] Штат: [[!+modx.user.id:userinfo=`state`]] Zip код : [[!+modx.user.id:userinfo=`zip`]] Фото: [[!+modx.user.id:userinfo=`photo`]] Коментар: [[!+modx.user.id:userinfo =`comment`]] Дата останнього входу: [[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]] Кількість входів: [[!+modx.user .id:userinfo=`logincount`]]

Особливу увагу звертаємо на знак оклику [[ ! +modx.user.id]]. Він дозволяє НЕ кешувативміст виводу. Чому потрібно не кешувати? Уявимо це так: на сайті 5 користувачів. Перший користувач зайшов на сторінку із викликом:

Ласкаво просимо, [[!+modx.user.id:userinfo=`username`]]!

За задумом на цій сторінці виводиться вітальне повідомлення користувачу. Так от, якщо результат кешуватиметься, то при першому вході на цю сторінку - збережеться ім'я користувача який тільки що зайшов - і решті буде показуватися не їх ім'я, а ім'я того користувача який увійшов на цю сторінку першим. Щоб цього уникнути - просто не кешуємо цей тег, за допомогою знака оклику перед викликом [[ ! +modx…

PS: Не забуваємо відключатикешування тегів, де потрібно! Щоб це зробити – потрібно ПОБУТАТИвід знаків оклику ( ! ). Результати більшості сніпетів цілком можуть працювати з кешу. У наступному уроці розберемо.

Фільтри в революції дозволяють керувати способом представлення даних. Вони дозволяють змінювати значення усередині шаблонів.

У революції вихідний фільтр застосовується один або більше разів із серії вихідних модифікаторів, які поводяться подібно до PHx викликів у MODx Evolution - за винятком, що вони вбудовані в ядро. Синтаксис виглядає так:

[ ]

Вони також можуть бути з'єднані (виконується зліва направо):

[ ]

Ви також можете використовувати їх, щоб змінити вихід сніпету; увага, модифікатор йде після імені сніпета і перед знаком питання, наприклад,

[ ]

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

Умовні модифікатори:

Модифікатор

Опис

приклад

if, input

Логічне АБО

[ [+numbooks:is=`5`:or:is=`6`:then=`There are 5 or 6 books!`:else=`Not sure how many books`] ]

Логічне І

isequalto, isequal, equalto, equals, is, eq

[ [+numbooks:isequalto=`5`:then=`There are 5 books!`:else=`Not sure how many books`] ]

notequalto, notequals, isnt, isnot, neq, ne

[ [+numbooks:notequalto=`5`:then=`Not sure how many books`:else=`There are 5 books!`] ]

greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte

Більше чи рівно

[ [+numbooks:gte=`5`:then=`There are 5 books or more than 5 books`:else=`There are less than 5 books`] ]

isgreaterthan, greaterthan, isgt, gt

[ [+numbooks:gt=`5`:then=`There are more than 5 books`:else=`There are less than 5 books`] ]

equaltoorlessthan, lessthanorequalto, el, le, islte, lte

Менше або дорівнює

[ [+numbooks:lte=`5`:then=`There are 5 or less than 5 books`:else=`There are more than 5 books`] ]

islowerthan, islessthan, lowerthan, lessthan, islt, lt

[ [+numbooks:lt=`5`:then=`There are less than 5 books`:else=`There are more than 5 books`] ]

[ [+numbooks:lt=`1`:hide] ]

[ [+numbooks:gt=`0`:show] ]

[ [+numbooks:gt=`0`:then=`Now available!`] ]

[ [+numbooks:gt=`0`:then=`Now available!`:else=`Sorry, currently sold out.`] ]

memberof, ismember, mo

[ [+modx.user.id:memberof=`Administrator`] ]

Строкові модифікатори:

Модифікатор

Опис

приклад

Якщо не порожньо

[ [+numbooks:cat=`books`] ]

lcase, lowercase, strtolower

Транформація у малі літери

[ [+title:lcase] ]

ucase, uppercase, strtoupper

Трансформація у великі літери

[ [+headline:ucase] ]

Перша буква слова заголовна

[ [+title:ucwords] ]

Перша буква заголовна

[ [+name:ucfirst] ]

htmlent, htmlentities

Заміна тегів HTML

[ [+email:htmlent] ]

esc,escape

Безпечно прибирає символи

[ [+email:escape] ]

Заміна перекладу каретки, табуляції та безлічі прогалин на одну прогалину

[ [+textdocument:strip] ]

stripString

Видаляє значення з рядка

[ [+name:stripString=`Mr.`] ]

Заміна значення

[ [+pagetitle:replace=`Mr.==Mrs.`] ]

striptags, stripTags, notags, strip_tags

Прибирає HTML теги

[[+code:strip_tags=`

len,length, strlen

Довжина рядка

[ [+longstring:strlen] ]

reverse, strrev

Реверс рядка

[ [+mirrortext:reverse] ]

Wordwrap

Новий рядок після вказаної кількості символів

[ [+bodytext:wordwrap=`80`] ]

wordwrapcut

Вставляє новий рядок після певної кількості символів.

[ [+bodytext:wordwrapcut=`80`] ]

Кількість символів, що виводиться

[ [+description:limit=`50`] ]

ellipsis

Обрізання рядка після вказаної кількості символів

[ [+description:ellipsis=`50`] ]

Відображає сирий елемент без тега. Корисно для документації.

[ [+showThis:tag] ]

Якщо значення може змінюватися динамічно, його слід зробити некешованим. Наприклад:

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

Це означає, що значення іноді може бути порожнім, а іноді ні. Навіщо його зберігати у кеші? Це може виключити, що значення може з'явитися.

Якщо ви не впевнені, чи буде результат при виконанні сніпета, то логічно зробити значення за замовчуванням:

[ [!getResources:default=`Sorry - не збирається вашого search.`? &tplFirst=`blogTpl` &parents=`2,3,4,8` &tvFilters=`blog_tags==%%` &includeTVs=`1`] ]

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

Фільтри введення

В даний час фільтри введення використовуються при підготовці до обробки виводу фільтрів. Зазвичай вони використовуються тільки всередині двигуна MODX.

Фільтри виводу

У Revolution фільтри виведення поводяться так само, як і PHx в Evolution, тільки фільтри тепер вбудовані прямо в двигун MODX. Синтаксис виглядає так:

[]

Фільтри можуть застосовуватись послідовно. Для цього напишіть їх поспіль (зліва направо):

[]

Також фільтри можуть застосовуватись для модифікації виведення сніпетів. Фільтр потрібно прописувати перед усіма параметрами (перед знаком питання):

[]

Модифікатори виводу

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

Умовні модифікатори виводу

Модифікатор Опис Приклад використання
if, input Передає довільний текст на введення для наступного модифікатора [[*id:input=`[[+placeholder]]`:is=`1`:then=`Так`:else=`Ні`]]
or АБО [[+numbooks:is=`5`:or:is=`6`:then=`Тут 5 або 6 книг`:else=`Не впевнений, скільки книг`]]
and Об'єднання кількох модифікаторів зв'язком І [[+numbooks:gt=`5`:and:lt=`10`:then=`Тут від 5 до 10 книг`:else=`Книг або менше 5, або більше 10`]]
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=`Пробачте, але все продано.`]]
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()`. Також екранує теги MODX. [[+email:escape]]
strip Замінює всі переноси, табуляції та будь-яку кількість прогалин лише однією пробілом [[+textdocument:strip]]
stripString Вирізує з рядка вказаний підрядок [[+name:stripString=`Mr.`]]
replace Здійснює заміну підрядків [[+pagetitle:replace=`Mr.==Mrs.`]]
striptags, stripTags, notags, strip_tags Вирізує всі теги (можна вказати дозволені теги). Не використовуйте для забезпечення безпеки. [[+code:strip_tags]]
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]]
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 Замінює символи нового рядка на HTML-тег br [[+textfile:nl2br]]
date Перекладає таймстамп у текст відповідно до зазначеного формату (формат дати) [[+birthyear:date=`%Y`]]
strtotime Перекладає дату у вигляді тексту в UNIX таймстамп [[+thetime:strtotime]]
fuzzydate Приймає таймстамп та повертає дату у вигляді "Сьогодні о 16:20 PM" [[+createdon:fuzzydate]]
ago Повертає кількість секунд, хвилин, тижнів або місяців, що пройшли з дати, вказаної в мітці. [[+createdon:ago]]
md5 Створює MD5-хеш значення [[+password:md5]]
cdata Обертає висновок тегами CDATA [[+content:cdata]]
userinfo Повертає потрібне значення з профілю користувача. Необхідно вказувати ID користувача [[!+modx.user.id:userinfo=`username`]]
isloggedin Повертає 1, якщо користувач авторизований у контексті [[!+modx.user.id:isloggedin:is=`1`:then=`Yes`:else=`No`]]
isnotloggedin Повертає 1, якщо користувач неавторизований у поточному контексті [[!+modx.user.id:isnotloggedin:is=`1`:then=`No`:else=`Yes`]]
urlencode Конвертує значення як URL, тобто застосовує PHP фнукцію `urlencode()` [[+mystring:urlencode]]
urldecode Конвертує значення як із URL, тобто застосовує PHP фнукцію `urldecode()` [[+myparam:urldecode]]

Модифікатори для роботи з користувачами необхідно викликати некешованими, щоб кожен користувач бачив життєві дані.

Використання модифікаторів виводу разом із параметрами

Якщо тег має параметри, їх необхідно прописувати відразу після модифікатора:

[[!getResources:default=`На жаль, нічого не знайдено`? &tplFirst=`blogTpl` &parents=`2,3,4,8` &tvFilters=`blog_tags==%[[!tag:htmlent]]%` &includeTVs=`1` ]]

Створення модифікатора користувача

Будь-який сніпет може використовуватися як модифікатор виводу. Для цього просто вкажіть ім'я сніпета замість модифікатора. Наприклад, створимо сниппет [] , який додає висновку певну кількість знаків оклику:

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

Такий виклик тега передасть у сніпет makeExciting наступні параметри для обробки:

Параметр Значення Значення у прикладі

© 2023 androidas.ru - Все про Android