Фильтрация по TV в pdoResources. Modx pdoresources


pdoResources / Сниппеты / pdoTools / docs.modx.pro

Сниппет предназначен для вывода списка ресурсов. Является продвинутой заменой для getResources: обладает всеми его возможностями, но лишен недостатков.

Умеет правильно сортировать ТВ параметры, присоединять таблицы при выборке, включать и исключать категории из разных контекстов и еще много чего.

Параметры

Параметры выборки ресурсов

Эти параметры определяют, какие ресурсы появятся в генерируемом списке.

Название По умолчанию Описание
&parents Текущий ресурс Список родителей, через запятую, для поиска результатов. Если поставить 0 - выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&depth 10 Глубина поиска дочерних ресурсов от родителя.
&resources Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&context Ограничение выборки по контексту ресурсов.
&where Массив дополнительных параметров выборки, закодированный в JSON.
&showHidden 1 Показывать ресурсы, скрытые в меню.
&showUnpublished 0 Показывать неопубликованные ресурсы.
&showDeleted 0 Показывать удалённые ресурсы.
&hideContainers 0 Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1».
&select 0 Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {"modResource":"id,pagetitle,content"}.
&sortby pagetitle Любое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs. Можно указывать JSON строку с массивом нескольких полей, например {"tvname":"ASC", "pagetitle":"DESC"}. Для случайно сортировки укажите «RAND()»
&sortdir DESC
Направление сортировки: по убыванию или возрастанию.
&limit 10 Ограничение количества результатов выборки. Можно использовать «0».
&offset 0 Пропуск результатов от начала.
&first 1 Номер первой итерации вывода результатов.
&last Автоматически, по формуле (total + first - 1) Номер последней итерации вывода результатов.
&loadModels Список компонентов, через запятую, чьи модели нужно загрузить для построения запроса. Например: &loadModels=`ms2gallery,msearch3`.
&tvFilters Список фильтров по ТВ, с разделителями AND и OR. Разделитель, указанный в параметре &tvFiltersOrDelimiter представляет логическое условие OR и по нему условия группируются в первую очередь. Внутри каждой группы вы можете задать список значений, разделив их &tvFiltersAndDelimiter. Поиск значений может проводиться в каком-то конкретном ТВ, если он указан «myTV==value», или в любом «value». Пример вызова: &tvFilters=`filter2==one,filter1==bar%||filter1==foo`. Обратите внимание: фильтрация использует оператор LIKE и знак «%» является метасимволом. И еще: Поиск идёт по значениям, которые физически находятся в БД, то есть, сюда не подставляются значения по умолчанию из настроек ТВ.
&tvFiltersAndDelimiter "," Разделитель для условий AND в параметре &tvFilters.
&tvFiltersOrDelimiter "||" Разделитель для условий OR в параметре &tvFilters.

Параметры шаблонов

Эти параметры устанавливают чанки, которые содержат шаблоны для генерации вывода, то есть отвечают за внешний вид.

Название Описание
&returnIds Установите значение «1», чтобы вернуть строку со списком id ресурсов, вместо оформленных результатов. Все указанные шаблоны игнорируются.
&tpl Имя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран.
&tplFirst Имя чанка для первого ресурса в результатах.
&tplLast Имя чанка для последнего ресурса в результатах.
&tplOdd Имя чанка для каждого второго ресурса.
&tplWrapper Чанк-обёртка, для заворачивания всех результатов. Понимает один плейсхолдер: [[+output]]. Не работает вместе с параметром &toSeparatePlaceholders.
&wrapIfEmpty Включает вывод чанка-обертки &tplWrapper даже если результатов нет.
&tplCondition Поле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls.
&tplOperator Необязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls.
&conditionalTpls JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях - чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей.
&outputSeparator Необязательная строка для разделения результатов работы.

Параметры результатов

Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.

Название По умолчанию Описание
&fastMode 0 Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&idx Вы можете указать стартовый номер итерации вывода результатов.
&totalVar total Имя плейсхолдера для сохранения общего количества результатов.
&includeContent 0 Включаем поле «content» в выборку.
&includeTVs Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+tv.action]] и [[+tv.time]].
&prepareTVs «1», что означает подготовку всех ТВ, указанных в &includeTVs Список ТВ параметров, которые нужно подготовить перед выводом.
&processTVs Список ТВ параметров, которые нужно обработать перед выводом. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs.
&tvPrefix tv. Префикс для ТВ параметров.
&useWeblinkUrl Генерировать ссылку с учетом класса ресурса, включает плейсхолдер [[+link]].
&toPlaceholder Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран.
&toSeparatePlaceholders Если вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры [[+myPl0]], [[+myPl1]] и т.д.
&showLog 0 Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «mgr».

Примеры

Простейший вывод списка дочерних ресурсов документа с идентификатором 1:

[[pdoResources? &parents=`1` &depth=`0` &tpl=`ListRowTpl` ]]

Если используется дополнительное поле image, то вызов изменится следующим образом:

[[pdoResources? &parents=`1` &depth=`0` &tpl=`ListRowTpl` &includeTVs=`image` ]]

В чанке ListRowTpl за это поле будет отвечать плейсхолдер [[+tv.image]]

Дополнительная информация

При переносе чанков с getResources, довольно распространённой ошибкой является использование модификатора strtotime, для форматирования даты.

Дело в том, что даты ресурсов и так хранятся в виде timestamp, но конвертируются в нормальные даты из-за использования объектов modResource - так запрограммировано в его свойствах. А потом, для форматирования даты, их нужно перевести обратно в timestamp. Выходит двойная ненужная конвертация.

pdoTools же работает напрямую с базой данных, без создания объектов и конвертации их значений, поэтому в чанк приходит timestamp, который не нужно дополнительно обрабатывать. Вы можете сразу применять модификатор date к значениям:

[[+publishedon:date=`%d.%m.%Y`]] или [[+createdon:date=`%Y-%m-%d`]]

Это касается работы с датами ресурсов и в других сниппетах pdoTools.

docs.modx.pro

pdoResources разбивка результатов по блокам / modx.pro

Всем привет. Столкнулся с такой задачей, нужно на сайте вывести карусель с изображениями и сделать так чтобы в каждом блоке было по 4 изображения. Вот пример:<div> <div> <div><a href="#x"><img src="http://placehold.it/300x300" alt="Image"></a></div> <div><a href="#x"><img src="http://placehold.it/300x300" alt="Image"></a></div> <div><a href="#x"><img src="http://placehold.it/300x300" alt="Image"></a></div> <div><a href="#x"><img src="http://placehold.it/300x300" alt="Image"></a></div> </div> </div> <div> <div> <div><a href="#x col-xs-6"><img src="http://placehold.it/300x300" alt="Image"></a></div> <div><a href="#x"><img src="http://placehold.it/300x300" alt="Image"></a></div> <div><a href="#x"><img src="http://placehold.it/300x300" alt="Image"></a></div> <div><a href="#x"><img src="http://placehold.it/300x300" alt="Image"></a></div> </div> </div>Тоесть блок с class=«item» должен повторяться через 4 добавленных изображения. Есть ли стандартное решение без велосипедов?

Вывод пока такой сделал:

[[!pdoResources? &parents=`19,20,21,22,23` &includeTVs=`image` &tplWrapper=`@INLINE <div><div>[[+output]]</div></div>` &tpl=`@INLINE <div><a href="#x"><img src="http://placehold.it/300x300" alt="Image"></a></div>` ]]

modx.pro

Фильтрация по TV в pdoResources / modx.pro

Здравствуйте!

У меня есть TV акция типа переключатели (радио):

Да==1||Нет==0Значение по умолчанию — 0 И два ресурса — один с акцией, другой без. Не работает вызов pdoResources:&#91;&#91;!AjaxSnippet? &snippet=&#96;pdoPage&#96; &propertySet=&#96;blog&#96; &element=&#96;pdoResources&#96; &parents=&#96;&#91;&#91;*id&#93;&#93;&#96; &tpl=&#96;blogTpl&#96; &includeTVs=&#96;isAction,actionDate,imageOnMain,textOnMain&#96; &prepareTVs=&#96;1&#96; &processTVs=&#96;1&#96; &where=&#96;{"isAction":"0"}&#96; &limit=&#96;1&#96; &page=&#96;&#91;&#91;!geturi&#93;&#93;&#96; &pageVarKey=&#96;page2&#96; &as_mode=&#96;onload&#96; &wrapper=&#96;tpl.ajax&#96; &showLog=&#96;1&#96; &#93;&#93;Ничего не выводит. Притом если указать &where=&#96;{"isAction":"1"}&#96;то выведет правильный ресурс или оба, если и второму тоже поставить акцию. Лог такой (если не акция):0.0001621: pdoTools loaded 0.0000410: xPDO query object created 0.0032070: Included list of tvs: <b>actionDate, imageOnMain, isAction, textOnMain</b> 0.0043399: leftJoined <i>modTemplateVarResource</i> as <b>TVactiondate</b> 0.0004411: leftJoined <i>modTemplateVarResource</i> as <b>TVimageonmain</b> 0.0004909: leftJoined <i>modTemplateVarResource</i> as <b>TVisaction</b> 0.0003319: leftJoined <i>modTemplateVarResource</i> as <b>TVtextonmain</b> 0.0005219: Added selection of <b>modResource</b>: <small>SQL_CALC_FOUND_ROWS &#96;id&#96;, &#96;type&#96;, &#96;contentType&#96;, &#96;pagetitle&#96;, &#96;longtitle&#96;, &#96;description&#96;, &#96;alias&#96;, &#96;link_attributes&#96;, &#96;published&#96;, &#96;pub_date&#96;, &#96;unpub_date&#96;, &#96;parent&#96;, &#96;isfolder&#96;, &#96;introtext&#96;, &#96;richtext&#96;, &#96;template&#96;, &#96;menuindex&#96;, &#96;searchable&#96;, &#96;cacheable&#96;, &#96;createdby&#96;, &#96;createdon&#96;, &#96;editedby&#96;, &#96;editedon&#96;, &#96;deleted&#96;, &#96;deletedon&#96;, &#96;deletedby&#96;, &#96;publishedon&#96;, &#96;publishedby&#96;, &#96;menutitle&#96;, &#96;donthit&#96;, &#96;privateweb&#96;, &#96;privatemgr&#96;, &#96;content_dispo&#96;, &#96;hidemenu&#96;, &#96;class_key&#96;, &#96;context_key&#96;, &#96;content_type&#96;, &#96;uri&#96;, &#96;uri_override&#96;, &#96;hide_children_in_tree&#96;, &#96;show_in_tree&#96;, &#96;properties&#96;</small> 0.0000150: Added selection of <b>modTemplateVarResource</b>: <small>IFNULL(&#96;value&#96;, '') AS &#96;tv.actionDate&#96;</small> 0.0000122: Added selection of <b>modTemplateVarResource</b>: <small>IFNULL(&#96;value&#96;, '') AS &#96;tv.imageOnMain&#96;</small> 0.0000100: Added selection of <b>modTemplateVarResource</b>: <small>IFNULL(&#96;value&#96;, '0') AS &#96;tv.isAction&#96;</small> 0.0000110: Added selection of <b>modTemplateVarResource</b>: <small>IFNULL(&#96;value&#96;, '') AS &#96;tv.textOnMain&#96;</small> 0.0000491: Replaced TV conditions 0.0007021: Processed additional conditions 0.0011911: Added where condition: <b>&#96;TVisaction&#96;.&#96;value&#96;=0, modResource.parent:IN(256,257,258), modResource.published=1, modResource.deleted=0</b> 0.0000350: Replaced TV conditions 0.0001531: Sorted by <b>modResource.publishedon</b>, <b>DESC</b> 0.0000041: Limited to <b>1</b>, offset <b></b> 0.0003650: SQL prepared <small>"SELECT SQL_CALC_FOUND_ROWS &#96;modResource&#96;.&#96;id&#96;, &#96;modResource&#96;.&#96;type&#96;, &#96;modResource&#96;.&#96;contentType&#96;, &#96;modResource&#96;.&#96;pagetitle&#96;, &#96;modResource&#96;.&#96;longtitle&#96;, &#96;modResource&#96;.&#96;description&#96;, &#96;modResource&#96;.&#96;alias&#96;, &#96;modResource&#96;.&#96;link_attributes&#96;, &#96;modResource&#96;.&#96;published&#96;, &#96;modResource&#96;.&#96;pub_date&#96;, &#96;modResource&#96;.&#96;unpub_date&#96;, &#96;modResource&#96;.&#96;parent&#96;, &#96;modResource&#96;.&#96;isfolder&#96;, &#96;modResource&#96;.&#96;introtext&#96;, &#96;modResource&#96;.&#96;richtext&#96;, &#96;modResource&#96;.&#96;template&#96;, &#96;modResource&#96;.&#96;menuindex&#96;, &#96;modResource&#96;.&#96;searchable&#96;, &#96;modResource&#96;.&#96;cacheable&#96;, &#96;modResource&#96;.&#96;createdby&#96;, &#96;modResource&#96;.&#96;createdon&#96;, &#96;modResource&#96;.&#96;editedby&#96;, &#96;modResource&#96;.&#96;editedon&#96;, &#96;modResource&#96;.&#96;deleted&#96;, &#96;modResource&#96;.&#96;deletedon&#96;, &#96;modResource&#96;.&#96;deletedby&#96;, &#96;modResource&#96;.&#96;publishedon&#96;, &#96;modResource&#96;.&#96;publishedby&#96;, &#96;modResource&#96;.&#96;menutitle&#96;, &#96;modResource&#96;.&#96;donthit&#96;, &#96;modResource&#96;.&#96;privateweb&#96;, &#96;modResource&#96;.&#96;privatemgr&#96;, &#96;modResource&#96;.&#96;content_dispo&#96;, &#96;modResource&#96;.&#96;hidemenu&#96;, &#96;modResource&#96;.&#96;class_key&#96;, &#96;modResource&#96;.&#96;context_key&#96;, &#96;modResource&#96;.&#96;content_type&#96;, &#96;modResource&#96;.&#96;uri&#96;, &#96;modResource&#96;.&#96;uri_override&#96;, &#96;modResource&#96;.&#96;hide_children_in_tree&#96;, &#96;modResource&#96;.&#96;show_in_tree&#96;, &#96;modResource&#96;.&#96;properties&#96;, IFNULL(&#96;TVactiondate&#96;.&#96;value&#96;, '') AS &#96;tv.actionDate&#96;, IFNULL(&#96;TVimageonmain&#96;.&#96;value&#96;, '') AS &#96;tv.imageOnMain&#96;, IFNULL(&#96;TVisaction&#96;.&#96;value&#96;, '0') AS &#96;tv.isAction&#96;, IFNULL(&#96;TVtextonmain&#96;.&#96;value&#96;, '') AS &#96;tv.textOnMain&#96; FROM &#96;modx_site_content&#96; AS &#96;modResource&#96; LEFT JOIN &#96;modx_site_tmplvar_contentvalues&#96; &#96;TVactiondate&#96; ON &#96;TVactiondate&#96;.&#96;contentid&#96; = &#96;modResource&#96;.&#96;id&#96; AND &#96;TVactiondate&#96;.&#96;tmplvarid&#96; = 38 LEFT JOIN &#96;modx_site_tmplvar_contentvalues&#96; &#96;TVimageonmain&#96; ON &#96;TVimageonmain&#96;.&#96;contentid&#96; = &#96;modResource&#96;.&#96;id&#96; AND &#96;TVimageonmain&#96;.&#96;tmplvarid&#96; = 36 LEFT JOIN &#96;modx_site_tmplvar_contentvalues&#96; &#96;TVisaction&#96; ON &#96;TVisaction&#96;.&#96;contentid&#96; = &#96;modResource&#96;.&#96;id&#96; AND &#96;TVisaction&#96;.&#96;tmplvarid&#96; = 40 LEFT JOIN &#96;modx_site_tmplvar_contentvalues&#96; &#96;TVtextonmain&#96; ON &#96;TVtextonmain&#96;.&#96;contentid&#96; = &#96;modResource&#96;.&#96;id&#96; AND &#96;TVtextonmain&#96;.&#96;tmplvarid&#96; = 39 WHERE ( &#96;TVisaction&#96;.&#96;value&#96; = '0' AND &#96;modResource&#96;.&#96;parent&#96; IN (256,257,258) AND &#96;modResource&#96;.&#96;published&#96; = 1 AND &#96;modResource&#96;.&#96;deleted&#96; = 0 ) ORDER BY modResource.publishedon DESC LIMIT 1 "</small> 0.0005929: SQL executed 0.0000889: Total rows: <b>0</b> 0.0000119: Rows fetched 0.0000219: Prepared and processed TVs 0.0000012: Returning processed chunks 0.0122540: <b>Total time</b> 13 631 488: <b>Memory usage</b> Помогите, пожалуйста, разобраться в чем проблема. Спасибо!

UPD:как оказалось, не работает значение по умолчанию. Если его не указывать, то

&where=&#96;{"isAction:!=":"1"}&#96;не отрабатывает (я так понимаю из-за того, что оно вообще не указано в бд...) Кто-то знает, в чем может быть причина?

modx.pro


Prostoy-Site | Все права защищены © 2018 | Карта сайта