Вывод данных с where в pdoPage modx revo
На modx можно делать интересные вещи. Не зря много веб-компаний делают порталы, интернет-магазины, мощные сервисы бронирования и другие сайты. Кроме того, modx входит в ТОП бесплатных CMS.
Но что-то я далеко зашел. Одним из нужных функционалов есть фильтрацией данных по определенному критерию. И в этой статье я хочу написать вам несколько примеров как фильтровать и выводить данные на modx с помощью pdoPage, в том числе и с дополнительных полей (tv).
Не забываем, что при использовании дополнительных полей в pdoPage их нужно прописать в includeTVs:
[[!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:
&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.
[[pdoMenu?
&parents=`76`
&level=`1`
&includeTVs=`status, start, minimum`
&where=`{"minimum:=":"1$", "OR:status:=":"Заявка"}`
&tpl=`sideall`
&limit=`10`
&sortdir=`DESC`
&sortby=`publishedon`
]] Это может быть из-за того, что забыли указать includeTVs. Также я столкнулся с такой проблемой в modx revolution 2.5.7-pl, версия pdoTools 2.9.2-pl1. Не выводило данные, которые в Параметрах ввода дополнительного поля стояли По умолчанию. Хотя в некоторых других частях кода все работало. Как только я убрал данные (заменил по умолчанию на пробел) сразу все заработало.
Очень много разговоров в последнее время за токен NOT. Много бирж будут делать листинг токена,…
Телеграм недавно запустил возможность стейкать (замораживать) USDT и получать за это их валюту TON. Очень…
Биржа криптовалют Binance проводит сейчас промо-акцию: новым пользователям дают ваучеры в сумме 110 долларов. Деньги…
Самый главный момент в работе с youtube - это получить ключ api через консоль разработчика…
Арендую сервер для небольшого проекта на python. И вот приходит мне уведомление, что за сутки…
Тестирую одну схему, и нужно на много видео наложить watermark. Решил делать через Python 3,…
View Comments
Добрый день!
Подскажите, как работать с pdoPage через Smarty?
Я написал следующий код вызова сниппета pdoPage в шаблоне Smarty:
{snippet name="pdoPage" params=[ 'limit' => 12 ,'tpl' => {include file='tpl/item.tpl'} ,'parents' => $modx->resource->id ,'includeTVs' => 'image,price' ] nocache}Но затем в шаблоне item.tpl не могу обратиться к дополнительным полям image,price.
Я нашел извращенный способ, но при этом типы данных становятся типа string и никак не обрабатываются в логике Smarty, например в условиях if, собственно item.tpl
@INLINE {assign var=params value=[ ,'price' => '[[+tv.price]]' ,'image' => '[[+tv.image]]' ]} <div> {if $params.price > 0}{$params.price} руб.{else}цена по запросу{/if} </div>Вот тут условие не работает, так как $params.price не является числом.
Что я делаю не так? Посоветуйте пожалуйста!
здравствуйте, к сожалению, не работал со Smarty.
Многие люди обвиняют MODX в том, что он не умеет хранить чанки в файлах и вынуждает лишний раз работать с базой данных. Это и неудобно для системы контроля версий, и медленнее.
Кто вам такое сказал, что Modx не может хранить в файлах чанки?
Посмотрите у каждого чанка, шаблона, сниппета, есть опция "статичный". Жмете на нее и слева появляется окно для выбора пути сохранения. Сохраняете. Далее, работаете уже в этом файле, где сохранили, через FTP, например. А чтобы обновлялось после каждой загрузки, не забывайте сбрасывать кеш страница, шаблона или этого чанка, либо вызов как некешируемый [[!$chunk_name]]
Спасибо, за некешируемый знал, а вот по статичному - не проверял
С другой стороны меньше обращение к файлам :)
Я думаю что хранение в БД лучшее решение.