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

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

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

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

Параметры

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

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

НазваниеПо умолчаниюОписание
&parentsТекущий ресурсСписок родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&depth10Глубина поиска дочерних ресурсов от родителя.
&resourcesСписок ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&contextОграничение выборки по контексту ресурсов.
&whereМассив дополнительных параметров выборки, закодированный в JSON.
&showHidden1Показывать ресурсы, скрытые в меню.
&showUnpublished0Показывать неопубликованные ресурсы.
&showDeleted0Показывать удалённые ресурсы.
&hideContainers0Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1».
&select0Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {«modResource»:»id,pagetitle,content»}.
&sortbypagetitleЛюбое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs.
Можно указывать JSON строку с массивом нескольких полей, например {«tvname»:»ASC», «pagetitle»:»DESC»}. Для случайно сортировки укажите «RAND()»
&sortdirDESCНаправление сортировки: по убыванию или возрастанию.
&setTotal0Отключение выборки total по умолчанию (с версии 2.11.0). Сниппет pdoPage включает его всегда.
&limit10Ограничение количества результатов выборки. Можно использовать «0».
&offset0Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit
&first1Номер первой итерации вывода результатов.
&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.
&conditionalTplsJSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей.
&outputSeparator
Необязательная строка для разделения результатов работы.

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

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

НазваниеПо умолчаниюОписание
&fastMode0Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&idxВы можете указать стартовый номер итерации вывода результатов.
&totalVartotalИмя плейсхолдера для сохранения общего количества результатов. Параметр setTotal должен быть включен.
&includeContent0Включаем поле «content» в выборку.
&includeTVs
Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+tv.action]] и [[+tv.time]].
&prepareTVs«1», что означает подготовку всех ТВ, указанных в &includeTVsСписок ТВ параметров, которые нужно подготовить перед выводом.
&processTVsСписок ТВ параметров, которые нужно обработать перед выводом. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs.
&tvPrefixtv.Префикс для ТВ параметров.
&useWeblinkUrlГенерировать ссылку с учетом класса ресурса, включает плейсхолдер [[+link]].
&toPlaceholder
Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран.
&toSeparatePlaceholdersЕсли вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры [[+myPl0]], [[+myPl1]] и т.д.
&showLog0Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «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.

Замена 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 по-прежнему будет работать, когда для телевизора установлено значение по умолчанию, а в таблице нет записей.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *