На modx можно делать интересные вещи. Не зря много веб-компаний делают порталы, интернет-магазины, мощные сервисы бронирования и другие сайты. Кроме того, modx входит в ТОП бесплатных CMS.
Но что-то я далеко зашел. Одним из нужных функционалов есть фильтрацией данных по определенному критерию. И в этой статье я хочу написать вам несколько примеров как фильтровать и выводить данные на modx с помощью pdoPage, в том числе и с дополнительных полей (tv).
Выводим данные с дополнительного поля с фильтрацией where
Не забываем, что при использовании дополнительных полей в pdoPage их нужно прописать в includeTVs:
1 2 3 4 5 6 7 8 | [[!pdoPage? &parents=`76` &includeTVs=`status, start, minimum` &where=`{"status":"Заявка"}` &tpl=`@INLINE <a href="[[+uri]]">[[+pagetitle]]</a>: [[+tv.status]]; от [[+tv.start]]; минимум [[+tv.minimum]] ` &limit=`10` ]] |
По коду:
!pdoPage = вызов сниппета, не кешируемый (знак восклицания).
parents = родительский элемент (если документы у вас в корне, то ставьте 0)
includeTVs = включает дополнительные поля для вывода
where = фильтрация запроса (в моем примере поле «статус» должно быть «Заявка»). Кстати, есть нюанс если стоит «поле по умолчанию» в настройке ввода дополнительного поля. Об этом позже.
tpl = шаблон вывода. В примере идет название статьи с активной ссылкой, дальше статус и еще два дополнительных поля.
limit = максимальное количество пунктов для вывода.
Примеры использования where в pdoPage modx revolution
Несколько примеров самого where:
1 2 3 4 5 6 7 8 9 10 | &where = `{"start:>" : "10.01.2018"}` &where=`{"minimum:>" : "100$"}` &where = `{"status" : "Выполнено"}` &where = `{"minimum:>=" : "1000"}` &where = `{"status:!=" : "Архив"}` &where = `{"minimum:!=" : "100"}` &where=`{"pagetitle:LIKE":"%rent%", "AND:minimum:LIKE":"%$%"}` &where=`{"pagetitle:LIKE":"%rent%", "OR:status:=":"Заявка"}` &where=`{"minimum:=":"100$", "OR:status:=":"Оплачено"}` &where=`{"minimum:=":"100$", "OR:status:=":"Оплачено", "OR:start:=":"20.03.2018"}` |
Обратите внимание на комбинированные запросы (AND, OR). В них для значений «равно» нужно писать := . Для неизвестной части значения знаки процентов %. Запросы могут быть и длиннее. Также обращайте внимание на формат дат, особенно в Дополнительных полях с Параметров ввода Дата.
Фильтр данных в pdoMenu modx
Все примеры выше также подойдут и для pdoMenu.
1 2 3 4 5 6 7 8 9 10 | [[pdoMenu? &parents=`76` &level=`1` &includeTVs=`status, start, minimum` &where=`{"minimum:=":"1$", "OR:status:=":"Заявка"}` &tpl=`sideall` &limit=`10` &sortdir=`DESC` &sortby=`publishedon` ]] |
Не выводит дополнительное поле в where через pdoPage modx
Это может быть из-за того, что забыли указать includeTVs. Также я столкнулся с такой проблемой в modx revolution 2.5.7-pl, версия pdoTools 2.9.2-pl1. Не выводило данные, которые в Параметрах ввода дополнительного поля стояли По умолчанию. Хотя в некоторых других частях кода все работало. Как только я убрал данные (заменил по умолчанию на пробел) сразу все заработало.
Добрый день!
Подскажите, как работать с pdoPage через Smarty?
Я написал следующий код вызова сниппета pdoPage в шаблоне Smarty:
Но затем в шаблоне item.tpl не могу обратиться к дополнительным полям image,price.
Я нашел извращенный способ, но при этом типы данных становятся типа string и никак не обрабатываются в логике Smarty, например в условиях if, собственно item.tpl
Вот тут условие не работает, так как $params.price не является числом.
Что я делаю не так? Посоветуйте пожалуйста!
здравствуйте, к сожалению, не работал со Smarty.
Многие люди обвиняют MODX в том, что он не умеет хранить чанки в файлах и вынуждает лишний раз работать с базой данных. Это и неудобно для системы контроля версий, и медленнее.
С другой стороны меньше обращение к файлам
Я думаю что хранение в БД лучшее решение.
Кто вам такое сказал, что Modx не может хранить в файлах чанки?
Посмотрите у каждого чанка, шаблона, сниппета, есть опция «статичный». Жмете на нее и слева появляется окно для выбора пути сохранения. Сохраняете. Далее, работаете уже в этом файле, где сохранили, через FTP, например. А чтобы обновлялось после каждой загрузки, не забывайте сбрасывать кеш страница, шаблона или этого чанка, либо вызов как некешируемый [[!$chunk_name]]
Спасибо, за некешируемый знал, а вот по статичному — не проверял