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]] . | |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | |
&toSeparatePlaceholders | Если вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры , [[+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.
Документация по 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 | Чанк-обёртка, для заворачивания всех результатов. Понимает один плейсхолдер: . Не работает вместе с параметром &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» дадут плейсхолдеры и . |
|
&prepareTVs | «1», что означает подготовку всех ТВ, указанных в &includeTVs | Список ТВ параметров, которые нужно подготовить перед выводом. |
&processTVs | Список ТВ параметров, которые нужно обработать перед выводом. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs. | |
&tvPrefix | tv. | Префикс для ТВ параметров. |
&useWeblinkUrl | Генерировать ссылку с учетом класса ресурса, включает плейсхолдер . |
|
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | |
&toSeparatePlaceholders | Если вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры , и т.д. |
|
&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.
Голосов: 279 | Просмотров: 5710
Вывод списка ресурсов на сайте с использованием pdoResources
Общие параметры для сниппетов, основанных на pdoTools/pdoFetch.
Параметры выборки ресурсов
Эти параметры определяют, какие объекты будут получены.
Название | По умолчанию | Описание |
---|---|---|
&class | modResource | Класс получаемого объекта |
&parents | Текущий ресурс | Список родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. |
&depth | 10 | Глубина поиска дочерних ресурсов от родителя. |
&resources | Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки. | |
&templates | Список шаблонов, через запятую, для фильтрации результатов. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки. | |
&context | Ограничение выборки по контексту ресурсов. | |
&where | Массив дополнительных параметров выборки, закодированный в JSON. | |
&showHidden | 0 | Показывать ресурсы, скрытые в меню. |
&showUnpublished | 0 | Показывать неопубликованные ресурсы. |
&showDeleted | 0 | Показывать удалённые ресурсы. |
&hideContainers | 0 | Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1». |
&hideUnsearchable | Отключает вывод спрятанных от поиска ресурсов. | |
&select | Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {«modResource»:»id,pagetitle,content»}. | |
&leftJoin | Аналог SQL оператора left join | |
&rightJoin | Аналог SQL оператора right join | |
&innerJoin | Аналог SQL оператора inner join | |
&joinSequence | innerJoin,leftJoin,rightJoin | Порядок подключения таблиц, через зяпятую. |
&sortby | pagetitle | Любое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs. Можно указывать JSON строку с массивом нескольких полей. Для случайно сортировки укажите «RAND()» |
&sortdir | ASC | Направление сортировки: по убыванию или возрастанию. |
&groupby | Указывает поле, по которому группируются результаты | |
&having | Используется, чтобы ограничить выборку сгруппированных строк с помощью условия, относящегося ко всей группе, заданной в &groupby | |
&limit | 0 | Ограничение количества результатов выборки. Можно использовать «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. |
&sortbyTV | Дополнительное поле, по которому нужно сортировать результаты. Может быть указано напрямую в параметре &sortby | |
&sortdirTV | Направление сортировки по дополнительному полю, указанному в &sortbyTV. Может быть указано напрямую в параметре &sortby | |
&sortbyTVType | Тип сортировки по ТВ параметру. Возможные варианты: string, integer, decimal и datetime. Если пусто, то ТВ будет отсортирован в зависимости от его типа: как текст, число или дата. | |
&checkPermissions | Укажите, какие разрешения нужно проверять у пользователя при выводе объектов. | |
&disableConditions | Отключает специфичные для класса modResource параметры выборки. | |
&fenomModifiers | список сниппетов-модификаторов через запятую, для подключения в Fenom. Подробности в соответствующем разделе. |
Параметры шаблонов
Эти параметры устанавливают чанки, которые содержат шаблоны для генерации вывода, то есть отвечают за внешний вид.
Название | Описание |
---|---|
&tpl | Имя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран. |
&tplFirst | Имя чанка для первого ресурса в результатах. |
&tplLast | Имя чанка для последнего ресурса в результатах. |
&tplOdd | Имя чанка для каждого чётного ресурса (хоть «odd» значит «нечётный», работает для чётных ресурсов). |
&tpl_N | Имя чанка для N-го ресурса, например, &tpl_4=`tpl4th` установит шаблон для 4-го ресурса. |
&tpl_nN | Имя чанка для каждого N-го ресурса, например, &tpl_n4=`tplEvery4th` будет применено к каждому 4-му ресурсу. |
&tplCondition | Поле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls. |
&tplOperator | Необязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls. |
&conditionalTpls | JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей. |
&outputSeparator | Необязательная строка для разделения результатов работы. |
Параметры результатов
Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.
Название | По умолчанию | Описание |
---|---|---|
&return | chunks | Определяет способ вывода результатов. См. ниже. |
&fastMode | 0 | Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. |
&nestedChunkPrefix | pdotools_ | Префикс для «быстрых плейсхолдеров», включаемых параметром &fastMode |
&idx | Вы можете указать стартовый номер итерации вывода результатов. | |
&totalVar | total | Имя плейсхолдера для сохранения общего количества результатов. |
&includeContent | 0 | Включаем поле «content» в выборку. |
&includeTVs | Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+action]] и [[+time]] . | |
&includeTVList | Псевдоним &includeTVs | |
&prepareTVs | 1 | Список ТВ параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить в «1», будут подготовлены все ТВ, указанные в &includeTVs. |
&processTVs | Список ТВ параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу. | |
&tvPrefix | tv. у pdoResources и пусто у других сниппетов | Префикс для ТВ параметров. |
&prepareSnippet | 1 | Указывает сниппет, который принимает данные перед выводом в чанк и может их менять или добавлять |
&decodeJSON | Разбирает поля типа JSON вместо вывода в виде строки | |
&scheme | -1 | Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции. |
&useWeblinkUrl | Генерировать ссылку с учетом класса ресурса. | |
&toSeparatePlaceholders | Если вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры [[+myPl0]] , [[+myPl1]] и т.д. | |
&additionalPlaceholders | Устанавливает дополнительные плейсхолдеры | |
&cache_key | Значение системной настройки cache_resource_key для ресурсов (по умолчанию resource) или default | Ключ кеширования |
&cache_handler | Значение системной настройки cache_resource_handler или xPDOFileCache | Обработчик кеша |
&cacheTime | Значение системной настройки cache_resource_expires или 0 (вечный) | Время жизни кеша |
Способы вызова чанков
Все чанки могут иметь один из следующих префиксов:
@INLINE или @CODE. В качестве шаблона будет использован код после этого префикса.
[[!pdoResources?
&parents=`0`
&tpl=`@INLINE <li>{{+pagetitle}}</li>`
]]
В INLINE чанках нельзя указывать сниппеты, другие чанки или фильтры вывода через обычные теги, потому что так парсер MODX обработает их в первую очередь, и сниппет получит совсем не то, что вы хотели.
Поэтому для INLINE чанков предусмотрена замена [[+]] на {{+}} — такие теги MODX пропускает, а pdoTools при работае конвертирует их как нужно. Конечно, вы всё равно можете использовать теги MODX, если вам нужно, чтобы в чанк попала уже обработанная информация, например:
[[!pdoResources?
&parents=`0`
&tplFirst=`@INLINE Текущая страница: [[*pagetitle]]`
&tpl=`@INLINE <p>{{+id}} - {{+pagetitle}}<p>`
]]
@FILE. Вместо чанка из базы данных используется содержимое файла. Путь до файла указывается в систеной настройке pdotools_elements_path. Имя файла должно быть с расширением .tpl или .html.
[[!pdoResources?
&tpl=`@FILE fileBasedRow.tpl`
]]
@TEMPLATE. Указывается идентификатор или имя шаблона. Если пусто — для каждого ресурса будет использован его собственный шаблон.
[[!pdoResources?
&tpl=`@TEMPLATE 10`
]]
@CHUNK. Аналогично простому указанию имени чанка, оставлено для совместимости со сторонними сниппетами.
[[!pdoResources?
&tpl=`@CHUNK tpl.Resource.row`
]]
[[!pdoResources?
&tpl=`tpl.Resource.row`
]]
Подробнее про возможности pdoParser можно прочитать в соответствующем разделе.
Возвращаемые значения
pdoTools умеет возвращать данные в разном виде, в зависимости от параметр &return
. В основном это используют сами сниппеты для внутренних нужд, но вы можете указывать &return
в pdoResources:
[[!pdoResources?
&parents=`0`
&return=`json`
]]
- chunks — оформленные чанки, по умолчанию.
- sql — подготовленный сырой SQL, полезно для отладки. Сам запрос не выполняется, только выводится на экран.
- data — готовый массив данных. Из-за особенностей работы сниппетов MODX этот вариант имеет смысл использовать только при вызове pdoFetch::run() напрямую из своего сниппета, в противном случае вы получите только строку «Array».
- ids — возвращает только идентификаторы документов, через запятую. Удобно для подстановки в качестве параметра другим сниппетам. Параметр
&returnIds
использует именно этот тип. - json — возврат массива данных JSON строкой.
- serialize — возврат массива данных сериализованной строкой. Иногда, по непонятным причинам, может вызвать нехватку памяти. Лучше использовать
json
.
pdoResources &where сортировка по дате / Русскоязычное сообщество MODX
Уж сколько копий изломано по этому параметру(а прежде и по &tvFilters), вот очередная похожая проблема,все что мог выискал, вычитал, в ядро дальше копать? Подскажите, чего я не вижу.
Есть события, у каждого в двух TV — время начала и окончания события. Как известно, они хранятся не в timestamp. Нужно выводить только те, у которых дата завершения еще не наступила.
В тестируемом контейнере событий всего 10, и только одно еще не завершилось.Сниппет currentDate возвращает просто метку времени через time().
Вызов сниппета:
{'!pdoResources' | snippet : [
'select' => '{"modResource":"id,pagetitle"}',
'tpl' => 'marketEventTpl',
'level' => '1',
'limit' => '100',
'tvPrefix' => '',
'includeTVs' => 'EventStart,EventEnd',
'templates' => '17',
'sortby' => '{"EventStart":"ASC"}'
'where' => 'UNIX_TIMESTAMP(EventEnd) > "[[!currentDate]]"'
'showLog' => '1'
]}
Лог результата:0.0000610: pdoTools loaded
0.0000160: xPDO query object created
0.0004399: Included list of tvs: EventEnd, EventStart
0.0001340: leftJoined modTemplateVarResource as TVeventend
0.0001180: leftJoined modTemplateVarResource as TVeventstart
0.0000529: Added selection of modResource: `id`, `pagetitle`
0.0000050: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `EventEnd`
0.0000041: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `EventStart`
0.0000520: Replaced TV conditions
0.0003431: Processed additional conditions
0.0005569: Added where condition: 0=UNIX_TIMESTAMP(`TVeventend`.`value`) > "1574334058", modResource.parent:IN(8,29,286,310,311,312,292,313,314,315,293,308,309), modResource.template:IN(17), modResource.published=1, modResource.deleted=0
0.0000060: Replaced TV conditions
0.0001009: Sorted by CAST(`TVeventstart`.`value` AS DATETIME), ASC
0.0000021: Limited to 100, offset 0
0.0001509: SQL prepared "SELECT `modResource`.`id`, `modResource`.`pagetitle`, IFNULL(`TVeventend`.`value`, '') AS `EventEnd`, IFNULL(`TVeventstart`.`value`, '') AS `EventStart` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVeventend` ON `TVeventend`.`contentid` = `modResource`.`id` AND `TVeventend`.`tmplvarid` = 149 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVeventstart` ON `TVeventstart`.`contentid` = `modResource`.`id` AND `TVeventstart`.`tmplvarid` = 148 WHERE ( UNIX_TIMESTAMP(`TVeventend`.`value`) > "1574334058" AND `modResource`.`parent` IN (8,29,286,310,311,312,292,313,314,315,293,308,309) AND `modResource`.`template` IN (17) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) ORDER BY CAST(`TVeventstart`.`value` AS DATETIME) ASC LIMIT 100 "
0.0012290: SQL executed
0.0000150: Rows fetched
0.0012670: Prepared and processed TVs
0.0005660: Loaded "modChunk" with name "marketEventTpl"
0.0079620: Compiled Fenom chunk with name "modchunk/8"
0.0120490: Returning processed chunks
0.0162890: Total time
8 388 608: Memory usage
Выводит все 10. Удивительно то, что если скормить формируемый SQL запрос напрямую в базу, получаем желаемый один результат!Если сравнивать чистые даты без преобразования в timestamp — результат тот же. Отправляем в базу — результат = одно событие.
SELECT `modResource`.`id`, `modResource`.`pagetitle`, IFNULL(`TVeventend`.`value`, '') AS `EventEnd`, IFNULL(`TVeventstart`.`value`, '') AS `EventStart` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVeventend` ON `TVeventend`.`contentid` = `modResource`.`id` AND `TVeventend`.`tmplvarid` = 149 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVeventstart` ON `TVeventstart`.`contentid` = `modResource`.`id` AND `TVeventstart`.`tmplvarid` = 148 WHERE ( `TVeventend`.`value` > "2019-11-21 05:05:22" AND `modResource`.`parent` IN (8,29,286,310,311,312,292,313,314,315,293,308,309) AND `modResource`.`template` IN (17) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) ORDER BY CAST(`TVeventstart`.`value` AS DATETIME) ASC LIMIT 100
&where пробовал также и в json виде задавать, результат аналогичный.Подскажите, куда копать?
Спасибо!
Вывод ресурсов в MODX Revo при помощи pdoResources
Автор Алексей На чтение 4 мин. Опубликовано
Последнее изменение поста: 18 декабря 2016 в 15:59
Приветствую вас уважаемые читатели! В предыдущих статьях мы наполнили сайт контентом, сделали меню и хлебные крошки. Сегодня мы изучим сниппет 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>
По идее все можно оставить и так, ссылки прописаны (<a href=»[[~13]]»>), все работает. Если бы я делал сайт для себя возможно так бы все и оставил, но сайт не для себя, а для человека который далек от веб-дизайна, да и мало ли появиться новый раздел или удалиться какой нибудь раздел, не лазить же постоянно по коду и удалять (добавлять) зад назад. По то эму его лучше сделать динамичным. И так начнем.
Первым делом создаем чанк где будет формироваться оформление и контент, назовем его «home» и вставим в него повторяющуюся часть кода:
<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>
Краткий разбор:
- [[+uri]] — формирует ссылку на ресурс
- [[+tv.image]] — выводит изображение из дополнительного поля image
- [[+pagetitle]] — заголовок ресурса
Теперь удаляем все статическое содержимое из этого чанка и вызываем все это содержимое при помощи pdoResources.
<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` - направление сортировки
Подробнее обо всех параметрах, читайте в официальной документации: docs.modx.pro/components/pdotools/snippets/pdoresources
Таким образом можно вывести практически все что угодно.
Да точно таким же образом можно все вывести при помощи PdoPage и в добавок к тому если много ресурсов для вывода, то их можно разбить на страницы, об этом в следующем уроке: Вывод ресурсов при помощи pdoResources
Не могу составить запрос where в PdoResources / Русскоязычное сообщество MODX
Хочу выводить на каждой странице похожие материалы-миниатюры страниц, которые я сам укажу в дополнительном поле.Соответственно создал дополнительное поле(checkbox) и вывел в возможные значения все нужные страницы.
Теперь вызываю PdoResources.
Значение view_page включает в себя заголовки страниц (Инженерные работыО насЧип-тюнинг).
Соответственно мне нужно выбрать страницы, которые встречаются поле view_page текущей страницы.
[[pdoResources? &tpl=`menu2_1` &limit=`0` &depth=`5` &parents=`8` &select=`pagetitle` &includeTVs=`kart,text_ca,zag` &showLog=`1` &where=`{"[[*view_page]]:LIKE":"%[[+pagetitle]]%"}` ]]
Проблема кажется из за того что не подставляются значения [[+pagetitle]].Вот лог
0.0001440: pdoTools loaded 0.0000319: xPDO query object created 0.0004199: Included list of tvs: kart, text_ca, zag 0.0003679: leftJoined modTemplateVarResource as TVkart 0.0003090: leftJoined modTemplateVarResource as TVtext_ca 0.0003059: leftJoined modTemplateVarResource as TVzag 0.0001671: Added selection of modResource: SQL_CALC_FOUND_ROWS `pagetitle` 0.0000100: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.kart` 0.0000072: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.text_ca` 0.0000072: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.zag` 0.0000670: Replaced TV conditions 0.0006969: Processed additional conditions 0.0011878: Added where condition: Инженерные работыО насЧип-тюнинг:LIKE=%%, modResource.parent:IN(8,84,85,10,95,110,97,98,86,89,90,93,88,87,9,83,99,100,101,102,105,106,107,108,103,104,111,113,128,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127), modResource.published=1, modResource.deleted=0 0.0000348: Replaced TV conditions 0.0001581: Sorted by modResource.publishedon, DESC 0.0002868: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`pagetitle`, IFNULL(`TVkart`.`value`, '') AS `tv.kart`, IFNULL(`TVtext_ca`.`value`, '') AS `tv.text_ca`, IFNULL(`TVzag`.`value`, '') AS `tv.zag` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVkart` ON `TVkart`.`contentid` = `modResource`.`id` AND `TVkart`.`tmplvarid` = 23 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVtext_ca` ON `TVtext_ca`.`contentid` = `modResource`.`id` AND `TVtext_ca`.`tmplvarid` = 25 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVzag` ON `TVzag`.`contentid` = `modResource`.`id` AND `TVzag`.`tmplvarid` = 24 WHERE ( `modResource`.`Инженерные работыО насЧип-тюнинг` LIKE '%%' AND `modResource`.`parent` IN (8,84,85,10,95,110,97,98,86,89,90,93,88,87,9,83,99,100,101,102,105,106,107,108,103,104,111,113,128,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) ORDER BY modResource.publishedon DESC " 0.0005851: Could not process query, error #1054: Unknown column 'modResource.Инженерные работыО насЧип-тюнинг' in 'where clause' 0.0041020: Total time 7 077 888: Memory usage
[pdoTools] pdoResources 1.4.1 / Расширения MODX / Блоги / bezumkin.ru
Продолжаю догонять и перегонять getResources. Со скоростью, понятно, вопросов нет, а вот функционал реализован еще не весь.Сегодняшнее обновление привносит следующие параметры:
- conditionalTpls — то есть, выбор чанков в зависимости от определённых условий.
- toSeparatePlaceholders — выставление всех результатов в разные плейсхолдеры.
- select — этого в аналогах нет, возможность указать список полей для выборки.
conditionalTpls
Не все знают, что в getResources есть возможность использовать разные чанки, в зависимости от значения в каком-то одном поле ресурса.Например, если не заполнен introtext, можно указать чанк без его использования. Проверять можно не только на пустоту, но на равенство, больше, меньше и null.
Для этого используются 3 параметра:
&tplCondition — Поле ресурса, из которого будет получено значение для выбора чанка по условию в «conditionalTpls». Например: introtext или published.
&tplOperator — Оператор сравнения, возможный список:
==, !=, < , > , <=, >=, empty, !empty, isnull&conditionalTpls — JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться «tplCondition», а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно.
Как это работает? Рассмотрим на примере:
[[!pdoResources? &parents=`2` &tpl=`chunk1` &tplCondition=`template` &tplOperator=`==` &conditionalTpls=`{"2":"chunk2", "5":"chunk5"}` ]]
В результате работы, все ресурсы с шаблонами 3 и 5 будут вывеедены в собственных чанках, а все остальные — в chunk1.
Для проверки на пустоту можно указывать массивы без ключей:
[[!pdoResources? &parents=`2` &tpl=`chunk1` &tplCondition=`introtext` &tplOperator=`empty` &conditionalTpls=`["no_intro"]` ]]
Для ресурсов с пустым introtext будет задействован чанк no_intro.
toSeparatePlaceholders
Этот параметр указывает, что результаты нужно выставить в несколько плейсхолдеров. Плейсхолдеры именуются из значения этого поля и индекса строки, начиная с нуля.Пример:
[[!pdoResources? &parents=`2` &toSeparatePlaceholders=`row` ]]В результате мы получим на странице возможные плейсхолдеры [[+row0]], [[+row1]] и т.д.
Не знаю, кому это понадобится, но для совместимости с getResources — сделал.
select
Этого функционала в getResources нет, но я решил добавить, для удобства.Теперь можно указывать, какие именно поля участвуют в выборке. Простой пример:
[[!pdoResources? &select=`id,pagetitle,content` ]]
Учитывая, что мы работаем с pdoTools, можно указывать и посложнее:
[[!pdoResources? &leftJoin=`{ "120x90": { "class":"msResourceFile" ,"alias":"120x90" , "on": "120x90.resource_id = modResource.id AND 120x90.path LIKE '%/120x90/' AND 120x90.rank=0" } }` &select=`{ "modResource":"id,pagetitle,content" ,"120x90":"120x90.url as 120x90" }` ]]
То есть, вы можете присоединять к ресурсам любые таблицы, и указывать, что именно из них выбирать. Такого вообще нигде нет, только в pdoTools.
Заключение
По сравнению с getResources теперь нет следующих параметров:Возможно (возможно) сделаю позже параметры &tvFilters, &sortbyTV, &sortdirTV и &sortbyTVType, для еще более плавной замены getResources на pdoResources.
Добавление новых комментариев отключено.