pdoResources - как выбрать по незаполнненому ТВ? Pdoresources modx revo
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 | Имя чанка для последнего ресурса в результатах. |
Имя чанка для каждого второго ресурса. | |
&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 как замена getResources / Сниппеты / Modx Revolution / Технический блог веб-разработчика
pdoResources как замена getResources
Ближайший аналог этих сниппетов в Evo - это Ditto. Используются для вывода дочерних ресурсов текущего документа, но можно указать и определённого родителя. Как пример, такое можно встретить в блоге - когда выводятся все записи определённой категории. pdoResources гораздо функциональнее и шустрее getResources, поэтому я его больше рекомендую к использованию. Различия в использовании параметров данных снипетов минимальны, поэтому переход на pdoResources будет безболезненным. Там же, где всё-таки есть небольшие нюансы, об этом будет написано отдельно.
Основные параметры
&parents=`[[*id]]` |
&parents=`[[*id]]` |
Список родителей, из которых будут выводиться дочерние ресурсы (указываются через запятую). Если перед именем ресурса поставить дефис, то такой ресурс будет исключаться из выборки. |
&resources |
&resources | Список ресурсов для вывода. При указании дефиса, ресурс исключается из выборки. |
&depth=`10` |
&depth=`10` | Глубина выборки от родителя. |
&tvFilters |
&tvFilters |
Фильтрация ресурсов по значениям TV. В качестве разделителя AND используется ","В качестве разделителя OR используется "||" Примеры вызова: &tvFilters=`color==red||color==yellow` - TV может принимать одно из двух значений, &tvFilters=`color==red,size==small` - одно из значений TV равно red, другое равно small,&tvFilters=`color==red||color==yellow,size==small||size=big` - комбинируем перечисленные выше два варианта, что так же допускается. Фильтрация для поиска использует оператор LIKE, поэтому можно писать так: &tvFilters=`mytv==А%` - название TV начинается на А. pdoResources. Можно использовать кастомные разделители значений. Задаются в параметрах tvFiltersOrDelimiter=`||`, tvFiltersAndDelimiter=`,`- разделители для "ИЛИ" и "И" соответственно. |
&sortby=`createdon` |
&sortby=`pagetitle` |
pdoResources. Eсли в параметрах свойства includeTVs перечислены значения TV, то возможна сортировка и по ним. getResources. Для сортировки по TV параметрам и задания направления используются параметры sortbyTV и sortdirTV соответственно. |
&sortdir=`DESC` |
&sortdir=`DESC` |
Направление для сортировки. |
&limit=`5` |
&limit=`10` |
Ограничение по количеству результатов. |
&offset=`0` |
&offset=`0` |
Пропуск результатов от начала. |
&where |
&where |
Ограничение выборки по тем или иным параметрам. Представляет собой строку, закодированную в JSON. |
&context |
&context |
Ограничение выборки по контексту. |
Дополнительные параметры
&showUnpublished=`0` |
&showUnpublished=`0` |
Показывать ли неопубликованные ресурсы. |
&showDeleted=`0` |
&showDeleted=`0` | Показывать ли ресурсы, помеченные как удалённые. |
&showHidden=`0` |
&showHidden=`0` | Показывать ли ресурсы, у которых стоит галочка "Не показывать в меню". |
&hideContainers=`0` |
&hideContainers=`0` | Показывать ли ресурсы, которые являются контейнерами. |
&includeContent=`0` |
&includeContent=`0` | Подгружать ли поле content. |
&includeTVs=`0` |
&includeTVs |
В параметрах указываем TV, которые так же будут доступны. В чанке доступ к TV будет доступен через плэйсхолдеры с префиксом tv. Например, [[+tv.price]] |
&prepareTVs=`1` |
&prepareTVs=`1` |
Список TV-параметров, которые нужно подготовить перед выборкой. 1 означает - подготовить все TV. |
&processTVs=`0` |
&processTVs |
Список TV, которые будут обработаны перед выводом. pdoResources. Если поставить 1, то будут обработаны все TV, указанные в includeTVs. |
&tvPrefix=`tv.` |
&tvPrefix=`tv.` |
Префикс для TV параметров. |
&idx=`1` |
&idx |
Цифра, с которой будет начинаться итерируемый плейсхолдер [[+idx]] |
&totalVar=`total` |
&totalVar=`total` |
Имя плейсхолдера, в котором будет храниться общее количество результатов. |
debug=`false` |
&showLog=`0` |
Будет ли выведена информация, отвечающая за отладку. Какие SQL запросы были выполнены и т. д. |
Параметры шаблонов
&tpl |
&tpl |
Имя чанка ресурса. Если не указано, то будет выведено содержимое всех полей. |
&tplOdd |
&tplOdd | Имя чанка для чётных ресурсов. |
&tplFirst |
&tplFirst | Имя чанка для первого ресурса. |
&tplLast |
&tplLast | Имя чанка для последнего ресурса. |
&tplCondition |
&tplCondition | Поле ресурса, в котором будет содержаться значение для выбора чанка по условию, заданному в параметре conditionalTpls |
&conditionalTpls |
&conditionalTpls |
JSON-строка с массивом, ключом которого будет выступать строка, которая будет сравниваться с полем, указанным в параметре tplCondition. А в качестве значения ключа будет выступать имя чанка, который будет использован, если условие выполнится. pdoResources. Оператор сравнения можно дополнительно указать в параметре tplOperator. |
&tplWrapper |
&tplWrapper |
Чанк-обёртка, в котором будут выводиться все ресурсы. [[+output]] - плэйсхолдер всех результатов. Примечание. Не работает с параметром &toSeparatePlaceholders |
&wrapIfEmpty=`false` |
&wrapIfEmpty |
Если в качестве значения указать 1, то принудительно выводит чанк, указанный в параметре tplWrapper, даже если результатов нет. |
&outputSeparator=`\n` |
&outputSeparator |
Строка для разделения результатов вывода. |
&toPlaceholder |
&toPlaceholder |
Если не пусто, то сниппет вместо вывода на экран, сохранит все результаты в плэйсхолдер. |
&toSeparatePlaceholders |
&toSeparatePlaceholders |
Если заполнить значение данного параметра, то вместо плэйсхолдера со всеми результатами, на выходе получится множество плэйсхолдеров, которые начинаются со значения, указанного вами в данном параметре. А после этого параметра будет идти порядковый номер результата плэйсхолдера. |
Примеры работы
Самый простой вызов, с необходимым минимумом параметров:
[[pdoResources? &parents=`1` &depth=`0` &tpl=`catalog_item` ]]Когда необходимо подключить дополнительный TV при выводе:
[[pdoResources? &parents=`1` &depth=`0` &tpl=`catalog_item` &includeTVs=`price` ]]Сортируем элементы по индексу (порядок расположения в дереве элементов):
[[!pdoResources? &tpl=`item_cat_second` &depth=`0` &parents=`9` &sortby=`menuindex` &sortdir=`ASC`]]cms-dev.ru
Вывод ресурсов в MODX Revo при помощи pdoResources
Приветствую вас уважаемые читатели! В предыдущих статьях мы наполнили сайт контентом, сделали меню и хлебные крошки. Сегодня мы изучим сниппет pdoResources, который входит в состав пакета PdoTools и предназначен для вывода ресурсов в любом оформлении на любой странице.
В моем случае мне нужно заменить статический контент на главной странице (из чанка content), если вы помноте он выглядит так:
А статический код этого чанка сейчас такой:
<div> <div> <p><a href="[[~8]]"><img src="assets/img/1.png" alt="Вертикальные"><br>Вертикальные</a></p> </div> <div> <p><a href="[[~9]]"><img src="assets/img/2.png" alt="Горизонтальные"><br>Горизонтальные</a></p> </div> <div> <p><a href="[[~10]]"><img src="assets/img/3.png" alt="В форме креста"><br>В форме креста</a></p> </div> <div> <p><a href="[[~11]]"><img src="assets/img/4.png" alt="Детские"><br>Детские</a></p> </div> <div> <p><a href="[[~12]]"><img src="assets/img/5.png" alt="Импортные"><br>Импортные</a></p> </div> <div> <p><a href="[[~13]]"><img src="assets/img/6.png" alt="Мемориальные комплексы"><br>Мемориальные<br/>комплексы</a></p> </div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <div> <div> <p><a href="[[~8]]"><img src="assets/img/1.png" alt="Вертикальные"><br>Вертикальные</a></p> </div> <div> <p><a href="[[~9]]"><img src="assets/img/2.png" alt="Горизонтальные"><br>Горизонтальные</a></p> </div> <div> <p><a href="[[~10]]"><img src="assets/img/3.png" alt="В форме креста"><br>В форме креста</a></p> </div> <div> <p><a href="[[~11]]"><img src="assets/img/4.png" alt="Детские"><br>Детские</a></p> </div> <div> <p><a href="[[~12]]"><img src="assets/img/5.png" alt="Импортные"><br>Импортные</a></p> </div> <div> <p><a href="[[~13]]"><img src="assets/img/6.png" alt="Мемориальные комплексы"><br>Мемориальные<br/>комплексы</a></p> </div> </div> |
По идее все можно оставить и так, ссылки прописаны (<a href=»[[~13]]»>), все работает. Если бы я делал сайт для себя возможно так бы все и оставил, но сайт не для себя, а для человека который далек от веб-дизайна, да и мало ли появиться новый раздел или удалиться какой нибудь раздел, не лазить же постоянно по коду и удалять (добавлять) зад назад. По то эму его лучше сделать динамичным. И так начнем.
Первым делом создаем чанк где будет формироваться оформление и контент, назовем его «home» и вставим в него повторяющуюся часть кода:
<div> <p><a href="[[~8]]"><img src="assets/img/1.png" alt="Вертикальные"><br>Вертикальные</a></p> </div>
<div> <p><a href="[[~8]]"><img src="assets/img/1.png" alt="Вертикальные"><br>Вертикальные</a></p> </div> |
Если вы заметили у меня 6 таких однотипных блоков. Теперь сделаем этот блок динамичным:
<div> <p><a href="[[+uri]]"><img src="[[+tv.image]]" alt="[[+pagetitle]]"><br>[[+pagetitle]]</a></p> </div>
<div> <p><a href="[[+uri]]"><img src="[[+tv.image]]" alt="[[+pagetitle]]"><br>[[+pagetitle]]</a></p> </div> |
Краткий разбор:
- [[+uri]] — формирует ссылку на ресурс
- [[+tv.image]] — выводит изображение из дополнительного поля image
- [[+pagetitle]] — заголовок ресурса
Теперь удаляем все статическое содержимое из этого чанка и вызываем все это содержимое при помощи pdoResources.
<div> [[pdoResources? &parents=`7` &depth=`0` &tpl=`home` &includeTVs=`image` &sortdir=`ASC` ]] </div>
<div> [[pdoResources? &parents=`7` &depth=`0` &tpl=`home` &includeTVs=`image` &sortdir=`ASC` ]] </div> |
Краткое описание параметров:
&parents =`7` - родители ресурсов (0 - все ресурсы) &depth =`0`- уровень вложенности &tpl =`home` - чанк оформления, для вывода ресурсов &includeTVs =`image` - подключаем TV поля (через запятую) &sortdir =`ASC` - направление сортировки
&parents =`7` - родители ресурсов (0 - все ресурсы) &depth =`0`- уровень вложенности &tpl =`home` - чанк оформления, для вывода ресурсов &includeTVs =`image` - подключаем TV поля (через запятую) &sortdir =`ASC` - направление сортировки |
Подробнее обо всех параметрах, читайте в официальной документации: docs.modx.pro/components/pdotools/snippets/pdoresources
Таким образом можно вывести практически все что угодно.
Да точно таким же образом можно все вывести при помощи PdoPage и в добавок к тому если много ресурсов для вывода, то их можно разбить на страницы, об этом в следующем уроке: Вывод ресурсов при помощи pdoResources
web-revenue.ru
Вывод списка ресурсов на сайте с использованием pdoResources
Сниппет предназначен для вывода списка ресурсов. Является продвинутой заменой для 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.
www.riwkus.pro
как выбрать по незаполнненому ТВ? / modx.pro
Как выбрать все ресурсы, у которых не заполнен ТВ например через pdoResources или getTickets? То есть есть тв moderation. Нужно выбрать все ресурсы, у которых тв moderation != 1. Комментарий отсюда не работает. Эта статья тоже ничего не дала.То есть варианты типа
'where' => '{ "moderation:IS": null }', 'where' => '{ "moderation": "" }', 'where' => '{ "moderation:!=": 1 }', 'where' => '{ "TVmoderation.value:!=":1 }', 'where' => '{ "moderation:IS": null, "OR:moderation":"" }', 'where' => '[ TVmoderation.value != 1 ]',не работают, а точнее выводят 0 результатов. Вот &showLog:0.0000851: pdoTools loaded 0.0000339: xPDO query object created 0.0003300: Included list of tvs: moderation 0.0001380: leftJoined modTemplateVarResource as TVmoderation 0.0002620: Added selection of Ticket: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties` 0.0000091: Added selection of modTemplateVarResource: IFNULL(`value`, '0') AS `tv.moderation` 0.0000350: Replaced TV conditions 0.0005832: Processed additional conditions 0.0008240: Added where condition: `TVmoderation`.`value`:!==1, Ticket.parent:IN(34,118893,118894,118896,118897,118898,118899,118900,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,190,191,118823,118824,118842,118844,118861,118881,118907,118913,118927,118979,118988,118990,118991), Ticket.deleted=0 0.0000231: Replaced TV conditions 0.0000570: Sorted by Ticket.publishedon, DESC 0.0002320: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `Ticket`.`id`, `Ticket`.`type`, `Ticket`.`contentType`, `Ticket`.`pagetitle`, `Ticket`.`longtitle`, `Ticket`.`description`, `Ticket`.`alias`, `Ticket`.`link_attributes`, `Ticket`.`published`, `Ticket`.`pub_date`, `Ticket`.`unpub_date`, `Ticket`.`parent`, `Ticket`.`isfolder`, `Ticket`.`introtext`, `Ticket`.`richtext`, `Ticket`.`template`, `Ticket`.`menuindex`, `Ticket`.`searchable`, `Ticket`.`cacheable`, `Ticket`.`createdby`, `Ticket`.`createdon`, `Ticket`.`editedby`, `Ticket`.`editedon`, `Ticket`.`deleted`, `Ticket`.`deletedon`, `Ticket`.`deletedby`, `Ticket`.`publishedon`, `Ticket`.`publishedby`, `Ticket`.`menutitle`, `Ticket`.`donthit`, `Ticket`.`privateweb`, `Ticket`.`privatemgr`, `Ticket`.`content_dispo`, `Ticket`.`hidemenu`, `Ticket`.`class_key`, `Ticket`.`context_key`, `Ticket`.`content_type`, `Ticket`.`uri`, `Ticket`.`uri_override`, `Ticket`.`hide_children_in_tree`, `Ticket`.`show_in_tree`, `Ticket`.`properties`, IFNULL(`TVmoderation`.`value`, '0') AS `tv.moderation` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVmoderation` ON `TVmoderation`.`contentid` = `Ticket`.`id` AND `TVmoderation`.`tmplvarid` = 76 WHERE ( `TVmoderation`.`value` != '1' AND `Ticket`.`parent` IN (34,118893,118894,118896,118897,118898,118899,118900,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,190,191,118823,118824,118842,118844,118861,118881,118907,118913,118927,118979,118988,118990,118991) AND `Ticket`.`deleted` = 0 ) ORDER BY Ticket.publishedon DESC " 0.0010159: SQL executed 0.0001111: Total rows: 0 0.0000150: Rows fetched 0.0000141: Prepared and processed TVs 0.0000010: Returning processed chunks 0.0032361: Total time 18 087 936: Memory usageКак можно вывести только ресурсы, у которых TV != 1?modx.pro