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 | Направление сортировки: по убыванию или возрастанию. |
&setTotal | 0 | Отключение выборки total по умолчанию (с версии 2.11.0). Сниппет pdoPage включает его всегда. |
&limit | 10 | Ограничение количества результатов выборки. Можно использовать «0». |
&offset | 0 | Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit |
&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 | Имя чанка для каждого второго ресурса (хоть «odd» значит «нечётный», работает для чётных ресурсов). |
&tplWrapper | Чанк-обёртка, для заворачивания всех результатов. Понимает один плейсхолдер: [[+output]] . Не работает вместе с параметром &toSeparatePlaceholders. |
&wrapIfEmpty | Включает вывод чанка-обертки &tplWrapper даже если результатов нет. |
&tplCondition | Поле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls. |
&tplOperator | Необязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls. |
&conditionalTpls | JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей. |
&outputSeparator |
Параметры результатов
Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.
Название | По умолчанию | Описание |
---|---|---|
&fastMode | 0 | Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. |
&idx | Вы можете указать стартовый номер итерации вывода результатов. | |
&totalVar | total | Имя плейсхолдера для сохранения общего количества результатов. Параметр setTotal должен быть включен. |
&includeContent | 0 | Включаем поле «content» в выборку. |
&includeTVs | Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+tv.action]] и [[+tv.time]] . | |
&prepareTVs | «1», что означает подготовку всех ТВ, указанных в &includeTVs | Список ТВ параметров, которые нужно подготовить перед выводом. |
&processTVs | Список ТВ параметров, которые нужно обработать перед выводом. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs. | |
&tvPrefix | tv. | Префикс для ТВ параметров. |
&useWeblinkUrl | Генерировать ссылку с учетом класса ресурса, включает плейсхолдер [[+link]] . | |
Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | ||
&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, который не нужно дополнительно обрабатывать.
Вы можете сразу применять модификатор
[[+publishedon:date=`%d.%m.%Y`]] или [[+createdon:date=`%Y-%m-%d`]]
Это касается работы с датами ресурсов и в других сниппетах pdoTools.
Замена getResources на pdoResources в MODX Revolution
Категория: Разработка сайтов
Вчера решил попробовать заменить на сайте вывода ресурсов с «getResources» на «pdoResources». Результат превзошел все ожидания. Время загрузки кешируемой главной страницы уменьшилось с 1.1 сек до 0.76 сек.
Переход занимает менее 10 минут. Достаточно установить из репозитория пакет pdoTools (про пакет «pdoTools» и остальные его сниппеты я написал отдельную статью — pdoTools в MODX Revoluton — замена стандартных сниппетов) и сделать несколько правок.
Меняем название getResources на pdoResources
Само собой разумеющийся пункт и здесь хотелось бы лишь отметить, что если для вывода ресурсов у вас используется постраничная навигация («getPages»), то это никак не помешает переходу. Точно так же применяйте вместо элемента вывода getResources — pdoResources. Различие в параметрах будет лишь одно. О нем ниже.
Включение TV параметров в вывод
В «getResources» указывается значение 1 если требуется включать TV параметры в результат вывода и 0, если не требуется:
&includeTVs=`1`
В «pdoResources» необходимо указывать имена TV параметров через запятую:
&includeTVs=`img-news,tags`
Вывод даты публикации ресурса
В getResources:
Опубликовано: [[+publishedon:strtotime:date=`%d %b %Yг. в %H:%M`]]
В pdoResources убираем промежуточную функцию «strtotime»:
Опубликовано: [[+publishedon:date=`%d %b %Yг. в %H:%M`]]
Замена «getResourcesTag»
Вместе с «getResources» идет сниппет «getResourcesTag», который выводит ресурсы по тегу. «pdoResources» может заменить и его. Я реализовал замену включением в «pdoResources» следующего параметра:
&where=`{"tags:LIKE":"%[[!getUrlParam? &name=`tag`]]%"}`
Он указывает на то, что требуется вывести только те статьи, у которых в TV-поле «tags» встречается слово, передаваемое в адресной строке в параметре «tag».
Для получения этого параметра я использую snippet «getUrlParam». Устанавливается он из репозитория как обычный пакет. Он предназначен для вывода значения переменной, передаваемой в адресной строке методом GET.
Параметр «conditionalTpls»
Этот пункт здесь лишний, так как данный параметр есть как у первого сниппета, так и у второго. Однако, узнал я о его существовании только когда начал разбираться c «pdoResources».
-
&conditionalTpls — параметр применяется в сниппетах pdoResources/getResources при необходимости осуществить вывод отдельных ресурсов в «свои» чанки:
[[!pdoResources? &parents=`2` &tpl=`chunk1` &tplCondition=`pagetitle` &tplOperator=`==` &conditionalTpls=`{"Статья 2":"chunk2", "Статья 5":"chunk3"}` ]]
-
&tplCondition — Поле ресурса, из которого будет получено значение для выбора чанка по условию в «conditionalTpls». Например: pagetitle или alias.
-
&tplOperator — оператор сравнения, возможный список: ==, !=, , =, empty, !empty, isnull
-
&conditionalTpls — строка с массивом, в котором указано то, с чем будет сравниваться «tplCondition», а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешным.
Pdoresources: показывать ресурсы в указанном порядке (отсортировано вручную)
frischnetz
#1
Привет!
Как указать точный порядок, в котором pdoresources перечисляет результаты?
Я хочу отобразить список с &resources=`9,3,6`
и получить ресурсы 9,3 и 6 в указанном порядке. Возможный?
Люси
#2
Это может сработать?
&sortby=`{id:9,3,6}`
Если нет, вы можете сортировать на любом телевизоре, например, можно установить индекс меню для этих ресурсов на 1, 2, 3 соответственно, а затем использовать:
&sortby=`{menuindex:ASC}`
Фришнец
#3
sortby=`{id:9,3,6}`
Нет, это выдает ошибку:
Неустранимая ошибка : Uncaught TypeError: Аргумент 1, переданный в pdoFetch::replaceTVCondition(), должен иметь тип array, значение null задано
(Сортировка с помощью menuindex здесь невозможна)
Бруно17
#4
возможно
&sortby=`FIELD(modResource.id, 4,7,2,5,1)` &sortdir=`ASC`
Люси
#5
Может нужны кронштейны?
sortby=`{id:[9,3,6]}`
Фришнец
#6
Бинго! (странно, это было первое, что я попробовал, и тогда это не сработало…)
Спасибо!
@lucy Извините, все еще ошибки. Но версия Бруноса работает!
Люси
#7
Отлично, рад, что у вас все получилось. Я только что нашел его в документации для getResources. Я часто забываю заглянуть туда, но мне кажется, что примеров больше, чем в документации pdoResources.
https://docs.modx.com/current/en/extras/getresources/index
алроникс
#8
Обычно он сортирует по порядку идентификаторов, переданных в параметр, но… по умолчанию pdoResource использует значения по умолчанию для sortby и sortdir, которые равны pagetitle
и DESC
, что означает, что если вы используете только ресурсов
param, все будут отсортированы по pagetitle. Чтобы сделать возможной сортировку по порядку в списке идентификаторов, просто очистите параметры сортировки.
[[pdoResources? &resources=
9,3,6 &sortby=`` &sortdir=``]]
3 лайков
pdoResource ГДЕ — Сообщество MODX
cvgsolutions
#1
Здравствуйте!
Я создаю мегаменю, поэтому пытаюсь разделить ресурсы на основе столбца, в котором они должны отображаться.
У меня есть телевизор, список (одиночный выбор), по умолчанию 1 и значения от 1 до 6.
Итак, мне нужно сначала получить все ресурсы для каждой колонки.
Подскажите пожалуйста, если что-то здесь не так, потому что я почти все перепробовал и ничего!
[[!pdoResources? &parents=`[[+id]]` &глубина=`0` &tpl=`Уровень1MM` &prepareTVs=`1` &processTVs=`1` &includeTVs=`mmColoana` &where=`{"mmColoana:=":"1"}` &sortby=`{ "parent":"ASC", "menuindex":"ASC" }` ]]
P. S. Когда я удаляю предложение where, все отображается.
Спасибо!
1 Нравится
бобрай
#2
Попробуйте добавить это (при условии, что ваш телевизор не имеет префикса tv.
):
&tvPrefix=``
1 Нравится
cvgsolutions
#3
Спасибо!
Попробую.
Тем временем я решил проблему с:
&tvFilters= mmColoana==1
И, также, я прочитал сообщение с чем-то похожей проблемой, вызванной значением TV по умолчанию, которое не прописано в MySQL стол.
Итак, теперь мне нужно найти способ написать что-то подобное, чтобы включить значение по умолчанию, 1:
&tvFilters= mmColoana==1||mmColoana ==""
или что-то с NULL. У меня не было времени проверить…
Так что, возможно, в предложении WHERE речь идет о tvPrefix, но, по основной логике, я думаю, что реальная проблема заключается в значении TV по умолчанию.
Во всяком случае, очень плохая документация для такого хорошего инструмента, как pdoTools. Я не могу понять, когда мне нужны операторы типа &tvPrefix, prepareTVs, processTVs и, например, зачем мне дополнительный tvFilters, когда у меня есть предложение Where.
Также очень мало рабочих экземпляров…
bobray
#4
Я знаю, что getResources по-прежнему будет работать, когда для телевизора установлено значение по умолчанию, а в таблице нет записей.