pdoResources — вывод списков ресурсов в MODX

pdoResources Дополнения

Сниппет pdoResources предназначен для вывода списков ресурсов на сайте и является продвинутой заменой стандартного getResources. Он обладает всеми возможностями оригинального сниппета, но лишен его недостатков и работает в несколько раз быстрее благодаря оптимизированной работе с базой данных. Сниппет поддерживает подключение других таблиц через разные типы JOIN, позволяет указывать конкретные колонки для выборки и создавать гибкие условия фильтрации вплоть до чистого SQL.

Переход с getResources на pdoResources в большинстве случаев требует минимальных изменений — достаточно просто заменить имя сниппета в вызове. Основное отличие заключается в параметре &includeTVs: у getResources он принимает значения Да/Нет, тогда как у pdoResources — список конкретных названий TV-параметров через запятую.

Параметры pdoResources

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

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

Параметр Значение по умолчанию Описание
&parents ID текущей страницы Укажите родительские контейнеры через запятую для выборки дочерних ресурсов. Значение 0 убирает ограничение. Минус перед ID (-5) исключает контейнер и его потомков
&depth 10 Уровень вложенности для поиска дочерних элементов от указанных родителей
&resources Конкретные ID ресурсов для вывода, разделенные запятыми. Минус перед ID исключает ресурс из результатов
&context Фильтр по контексту — выводить ресурсы только из указанных контекстов
&where Дополнительные условия SQL в формате JSON для тонкой настройки выборки
&showHidden 1 Включать в результаты ресурсы со статусом «скрыт в меню»
&showUnpublished 0 Отображать неопубликованные документы
&showDeleted 0 Показывать ресурсы помеченные как удаленные
&hideContainers 0 Исключить из вывода контейнеры (ресурсы с isfolder = 1)
&select Перечень полей для выборки через запятую или JSON массив типа {"modResource":"id,pagetitle"}
&sortby pagetitle Поле для сортировки результатов, включая TV-параметры. Поддерживает JSON для множественной сортировки или RAND() для случайного порядка
&sortdir DESC Направление сортировки: ASC (по возрастанию) или DESC (по убыванию)
&setTotal 0 Выполнять подсчет общего количества результатов. Автоматически включается в pdoPage
&limit 10 Максимальное число результатов на странице. 0 убирает ограничение
&offset 0 Количество ресурсов для пропуска от начала выборки
&first 1 Стартовый номер для счетчика итераций в плейсхолдере [[+idx]]
&last Вычисляется автоматически Конечный номер итерации, рассчитывается как total + first - 1
&loadModels Компоненты для загрузки моделей через запятую (пример: ms2gallery,msearch2)
&tvFilters Фильтрация по TV-параметрам с операторами AND/OR. Используйте разделители из параметров ниже
&tvFiltersAndDelimiter , Символ для разделения условий AND в фильтрах TV
&tvFiltersOrDelimiter `

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

Отвечают за внешний вид.

Параметр Описание
&returnIds При значении 1 возвращает только строку с ID ресурсов вместо отформатированного HTML
&tpl Чанк для оформления каждого отдельного ресурса в списке
&tplFirst Альтернативный чанк для самого первого элемента в выборке
&tplLast Альтернативный чанк для последнего элемента в выборке
&tplOdd Чанк для четных элементов (несмотря на название «odd»)
&tplWrapper Обертка для всех результатов с плейсхолдером [[+output]]. Несовместим с &toSeparatePlaceholders
&wrapIfEmpty Выводить обертку &tplWrapper даже когда результатов нет
&tplCondition Поле ресурса для проверки условия выбора чанка
&tplOperator Оператор сравнения для условия в &tplCondition
&conditionalTpls JSON массив с условиями и соответствующими чанками для вывода
&outputSeparator Строка-разделитель между элементами результатов

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

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

Параметр Значение по умолчанию Описание
&fastMode 0 Ускоренная обработка чанков с удалением необработанных тегов
&idx Начальное значение для счетчика итераций [[+idx]]
&totalVar total Имя плейсхолдера для записи общего количества найденных ресурсов
&includeContent 0 Добавить поле content в выборку (увеличивает объем данных)
&includeTVs TV-параметры для включения в выборку через запятую
&prepareTVs 1 Список TV для предварительной подготовки или 1 для обработки всех из &includeTVs
&processTVs TV-параметры для обработки перед выводом или 1 для всех
&tvPrefix tv. Префикс для TV-параметров в плейсхолдерах
&useWeblinkUrl Учитывать тип ресурса при генерации ссылок (для weblink и symlink)
&toPlaceholder Сохранить результаты в указанный плейсхолдер вместо прямого вывода
&toSeparatePlaceholders Разбить результаты по отдельным плейсхолдерам с указанным префиксом и номером
&showLog 0 Вывести отладочную информацию (только для авторизованных в mgr)

Примеры

Простейший вызов сниппета для вывода дочерних ресурсов текущей страницы:

[[!pdoResources?
&tpl=`ListRow`
]]

Вывод ресурсов из конкретного контейнера с ID 5:

[[pdoResources?
  &parents=`5`
  &depth=`0`
  &tpl=`ListRow`
]]

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

[[pdoResources?
  &parents=`5`
  &depth=`0`
  &tpl=`ListRow`
  &includeTVs=`image`
]]

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

Работа с конкретными ресурсами

Если нужно вывести элементы в том же порядке, как они объявлены в параметре &resources:

[[pdoResources? &resources=`213,34,58,290` &sortdir=`ASC` &tpl=`ListRow`]]

Исключение конкретных ресурсов из выборки:

[[pdoResources? &parents=`5` &resources=`-12,-45` &tpl=`ListRow`]]

Сортировка и ограничение

Вывод последних 10 новостей по дате публикации:

[[pdoResources? &parents=`10` &sortby=`publishedon` &sortdir=`DESC` &limit=`10` &tpl=`NewsRow`]]

Случайный вывод 5 ресурсов:

[[pdoResources? &parents=`5` &sortby=`RAND()` &limit=`5` &tpl=`RandomItem`]]

Работа с TV-параметрами

Вывод с несколькими TV и без префикса:

[[pdoResources? &parents=`5` &includeTVs=`image,tags,date` &tvPrefix=`` &tpl=`ArticleRow`]]

Теперь в чанке можно использовать [[+image]] вместо [[+tv.image]].

Сортировка по TV-параметру:

[[pdoResources? &parents=`5` &includeTVs=`price,rating` &sortby=`price` &sortdir=`ASC` &tpl=`ProductRow`]]

Фильтрация

Исключение контейнеров и скрытых ресурсов:

[[pdoResources? &parents=`0` &hideContainers=`1` &showHidden=`0` &tpl=`PageRow`]]

Фильтрация по шаблонам:

[[pdoResources? &parents=`0` &templates=`1,5,7` &tpl=`ListRow`]]

Расширенная фильтрация через where:

[[pdoResources?
  &parents=`5`
  &where=`{
    "publishedon:>": "2025-01-01",
    "template:IN": [1,5,10]
  }`
  &tpl=`NewsRow`
]]

Фильтрация по TV

Простой фильтр по значению TV:

[[pdoResources?
  &parents=`5`
  &includeTVs=`category,status`
  &tvFilters=`category==news,status==published`
  &tpl=`ArticleRow`
]]

Фильтр с логикой OR:

[[pdoResources?
  &parents=`5`
  &includeTVs=`tags`
  &tvFilters=`tags==summer||tags==vacation`
  &tpl=`ArticleRow`
]]

Инлайн-шаблоны

Быстрый вывод без создания отдельного чанка:

[[pdoResources?
  &parents=`5`
  &tpl=`@INLINE 
<article>
  <h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3>
  <p>[[+introtext]]</p>
</article>`
]]

Простой список ссылок:

<ul>
[[pdoResources?
  &parents=`5`
  &tpl=`@INLINE <li><a href="[[~[[+id]]]]">[[+pagetitle]]</a></li>`
]]
</ul>

Вывод в плейсхолдеры

Сохранение результата для использования в другом месте:

[[pdoResources?
  &parents=`5`
  &limit=`5`
  &tpl=`LatestNews`
  &toPlaceholder=`latestNews`
]]

<aside>
  [[+latestNews]]
</aside>

Возврат только ID ресурсов:

[[pdoResources?
  &parents=`5`
  &returnIds=`1`
  &toPlaceholder=`idList`
]]

Список ID: [[+idList]]

Оптимизация

Выборка только нужных полей для ускорения работы:

[[pdoResources?
  &parents=`5`
  &select=`id,pagetitle,publishedon,introtext`
  &includeContent=`0`
  &tpl=`CompactRow`
]]

Быстрый режим без обработки дополнительных тегов:

[[pdoResources?
  &parents=`5`
  &tpl=`SimpleRow`
  &fastMode=`1`
]]

Особенности работы с датами

В отличие от getResources, даты в pdoResources уже хранятся в формате timestamp. Можно сразу применять модификатор date:

[[pdoResources?
  &parents=`5`
  &tpl=`@INLINE 
<article>
  <h3>[[+pagetitle]]</h3>
  <time>[[+publishedon:date=`%d.%m.%Y`]]</time>
</article>`
]]

Не нужно использовать strtotime как в getResources — даты уже в нужном формате.

Оцените статью
MODX 3
Добавить комментарий

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