Блог/Фильтрация документов

Фильтрация документов в Ditto

Автор: Кудашев Сергей

При создании сайтов на Modx Evolution регулярно приходится сталкиваться с ограничением листинга документов по каким-то параметрам. Иногда возникает необходимость исключить несколько документов из карты сайта или возникает необходимость спрятать часть документов выводимых из контейнера или бывает необходимым вывести только часть страниц на главной страницы, в общем это бывает стандартной задачей. Так как для формирования листингов в Modx Evolution используется сниппет Ditto именно о нем и пойдет речь.

Хочу отметить, что мы не будем рассматривать простейшие задачи, такие как исключение всех контейнеров (папок) из листинга, которые исключаются свойством вызова &hideFolders=`1` или вывода всех документов только из определенных контейнеров, который делается через свойство &parents=`id,id,id` или вывода только заданных документов, который делается через &documents=`id,id,id`. Такие ограничения они очевидны и легко находятся в документации. Нас же интересуют более сложные случаи, например, когда необходимо запретить вывод нескольких документов из большого листинга или разрешить вывод документов только по определенному параметру документа.

В сниппете Ditto для решения подобных задач существует свойство &filter, которое позволяет ограничить листинг выводимых документов. Как это работает? У данного свойства есть три параметра на входе:

`id,1,2`

первый параметр, это свойство документа, по которому будет делаться фильтрация.

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

третий параметр, это значение типа сравнения, которых на данный момент в систему заложено 11 штук:

Значение 1 - "!=" (не соответствует критерию)
Значение 2 - "==" (соответствует критерию)
Значение 3 - "<" (меньше критерия)
Значение 4 - ">" (больше критерия)
Значение 5 - "<=" (меньше или равен критерию)
Значение 6 - ">=" (больше или равен критерию)
Значение 7 - "" (не содержит текст критерия)
Значение 8 - "" (содержит текст критерия)
Значение 9 - "" тоже самое, что и 7, без учета регистра символов
Значение 10 - "" тоже самое, что и 8, без учета регистра символов
Значение 11 - "" проверка на первый символ критерия

Итак, если мы хотим запретить вывод документа имеющего id равным 11, нам достаточно добавить к вызову сниппета: &filter=`id,11,2`, после чего данный документ пропадет из листинга.

Одним из интересных примеров использования данного свойства Ditto в моей практике стало ограничение вывода документов в меню перелинковки. На одном из проектов у меня был контейнер, куда были добавлены документы, которые выводились в конце страницы, так же вы можете посмотреть еще материалов по теме. Однако со временем возникла необходимость добавить документы, которые должны были находиться в данном контейнере, но отражаться в другом навигационном меню. Для того, чтобы ограничить вывод новых документов и зная, что новые документы имею id больше 200, а старые документы имеют id до 102, мною была использована следующая конструкция: &filter=`id,2,3|id,102,4`. Надеюсь, теперь у вас не возникнет трудностей с фильтрованием документов.

Комментарии (0)