- Pdoresources depth не работает
- Параметры
- Параметры выборки ресурсов
- Параметры шаблонов
- Параметры результатов
- Примеры
- Дополнительная информация
- pdoResources не выводит tv и дату
- Комментарии: 10
- pdoResources — документация и примеры вывода ресурсов
- Документация по pdoResources
- Параметры выборки ресурсов
- Параметры шаблонов
- Параметры результатов
- Примеры из официальной документации
- Реальный пример вывода ресурсов
- Вывод ресурсов при помощи fenom.
- 2 вывода на одной странице, чтобы не дублировались ресурсы.
Pdoresources depth не работает
Сниппет предназначен для вывода списка ресурсов. Является продвинутой заменой для getResources: обладает всеми его возможностями, но лишен недостатков.
Умеет правильно сортировать ТВ параметры, присоединять таблицы при выборке, включать и исключать категории из разных контекстов и еще много чего.
Параметры
Параметры выборки ресурсов
Эти параметры определяют, какие ресурсы появятся в генерируемом списке.
| Название | По умолчанию | Описание |
|---|---|---|
| &parents | Текущий ресурс | Список родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. |
| &depth | 10 | Глубина поиска дочерних ресурсов от родителя. |
| &resources | Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки. | |
| &context | Ограничение выборки по контексту ресурсов. | |
| &where | Массив дополнительных параметров выборки, закодированный в JSON. | |
| &showHidden | 1 | Показывать ресурсы, скрытые в меню. |
| &showUnpublished | 0 | Показывать неопубликованные ресурсы. |
| &showDeleted | 0 | Показывать удалённые ресурсы. |
| &hideContainers | 0 | Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1». |
| &select | 0 | Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например . |
| &sortby | pagetitle | Любое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs. Можно указывать JSON строку с массивом нескольких полей, например . Для случайно сортировки укажите «RAND()» |
| &sortdir | DESC | Направление сортировки: по убыванию или возрастанию. |
| &limit | 10 | Ограничение количества результатов выборки. Можно использовать «0». |
| &offset | 0 | Пропуск результатов от начала. |
| &first | 1 | Номер первой итерации вывода результатов. |
| &last | Автоматически, по формуле (total + first — 1) | Номер последней итерации вывода результатов. |
| &loadModels | Список компонентов, через запятую, чьи модели нужно загрузить для построения запроса. Например: &loadModels=`ms2gallery,msearch2`. | |
| &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:
Если используется дополнительное поле image, то вызов изменится следующим образом:
В чанке ListRowTpl за это поле будет отвечать плейсхолдер [[+tv.image]]
Дополнительная информация
При переносе чанков с getResources, довольно распространённой ошибкой является использование модификатора strtotime, для форматирования даты.
Дело в том, что даты ресурсов и так хранятся в виде timestamp, но конвертируются в нормальные даты из-за использования объектов modResource — так запрограммировано в его свойствах. А потом, для форматирования даты, их нужно перевести обратно в timestamp. Выходит двойная ненужная конвертация.
pdoTools же работает напрямую с базой данных, без создания объектов и конвертации их значений, поэтому в чанк приходит timestamp, который не нужно дополнительно обрабатывать. Вы можете сразу применять модификатор date к значениям:
Это касается работы с датами ресурсов и в других сниппетах pdoTools.
Источник
pdoResources не выводит tv и дату
Комментарии: 10
И не выведет, потому как в условии нет вызова TV, а вместо этого 2 раза вызывается includeContent=`1`.
&includeTVs=`1` не равняется вызову нужных ТВишек. Должно быть &includeTVs=`newImage, и тд`.
И надеюсь все это не в одном ресурсе/чанке? Ибо &tpl=`newsBlockTpl` говорит pdoResources отправить все именно в этот шаблон, а не в текущий ресурс/чанк.
Что-то сумбурно написал, простите я из гостей вернулся 🙂
PS: И вообще, читайте доки
Всех с широкой масленницей 🙂
Да в доках вообще ничего не написано, особенно, если их не читать.
Открываем ссылку, смотрим описание &includeTVs:
Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+tv.action]] и [[+tv.time]].
Список ТВ, а не цифра 1.
Я не знаю, что поменялось, но неожиданно все начало само по себе работать.
Конечно, заменил &includeTVs=`1` на &includeTVs=`newsImage` и всё начало само по себе работать. Мистика!
Тоже самое и с вот этим
Сможешь ответить на вопрос, зачем здесь strtotime? Уверен, не сможешь, потому что так просто принято в getResources.
Фокус в том, что даты ресурсов в MODX и так хранятся в виде timestamp, и дополнительно преобразовывать их не нужно.
При работе через getResources этот timestamp сначала переводится в дату, потому что так задано в объекте modResource, а потом через фильтр в чанке обратно в timestamp. То есть, двойная бесполезная работа, которую pdoResources не делает.
А вот теперь самое интересное — наша документация открыта для редактирования, ты можешь всю эту информацию оформить как тебе удобно и добавить.
Только мало кто что-то добавляет, все только ноют, что «в доках вообще мало чего написано».
Извините, однотипные вопросы и нытьё надоело.
Источник
pdoResources — документация и примеры вывода ресурсов
Приветствую вас уважаемые читатели! В предыдущих статьях мы наполнили сайт контентом, сделали меню и хлебные крошки. Сегодня мы изучим сниппет pdoResources, который входит в состав пакета PdoTools и предназначен для вывода ресурсов в любом оформлении на любой странице.
Документация по pdoResources
Параметры выборки ресурсов
Эти параметры определяют, какие ресурсы появятся в генерируемом списке.
| Название | По умолчанию | Описание |
|---|---|---|
| &parents | Текущий ресурс | Список родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. |
| &depth | 10 | Глубина поиска дочерних ресурсов от родителя. |
| &resources | Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки. | |
| &context | Ограничение выборки по контексту ресурсов. | |
| &where | Массив дополнительных параметров выборки, закодированный в JSON. | |
| &showHidden | 1 | Показывать ресурсы, скрытые в меню. |
| &showUnpublished | 0 | Показывать неопубликованные ресурсы. |
| &showDeleted | 0 | Показывать удалённые ресурсы. |
| &hideContainers | 0 | Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1». |
| &select | 0 | Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например . |
| &sortby | pagetitle | Любое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs. Можно указывать JSON строку с массивом нескольких полей, например . Для случайно сортировки укажите «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,msearch2`. | |
| &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», вы получите плейсхолдеры [[+myPl0]] , [[+myPl1]] и т.д. | |
| &showLog | 0 | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «mgr». |
Примеры из официальной документации
Простейший вывод списка дочерних ресурсов документа с идентификатором 1:
Если используется дополнительное поле image, то вызов изменится следующим образом:
В чанке ListRowTpl за это поле будет отвечать плейсхолдер [[+tv.image]]
Реальный пример вывода ресурсов
В моем случае мне нужно заменить статический контент на главной странице, он выглядит так:
А статический код этого блока такой:
Первым делом создаем чанк где будет формироваться оформление и контент, назовем его «tpl-resources» и вставим в него повторяющуюся часть кода:
Теперь сделаем этот блок динамичным:
И сохраним чанк.
Краткий разбор:
- [[+uri]] — формирует ссылку на ресурс;
- [[+img]] — выводит изображение из дополнительного поля img;
- [[+pagetitle]] — заголовок ресурса;
- [[+content]] — выводит текстовую часть;
- ellipsis — модификатор обрезающий текст;
- pthumb — сниппет который уменьшает и подрезает картинки до нужного размера.
Теперь в месте где нужно вывести данное содержимое вызываем его при помощи pdoResources.
Краткое описание параметров:
Таким образом можно вывести практически все что угодно.
Вывод ресурсов при помощи fenom.
И так в курсе по Fenom мы создали блог и добавили в него статьи, теперь выведем последние 3 статьи на главной странице сайта, для этого откроем наш шаблон HomeTemplate.tpl и в место надписи «Здесь будет выборка статей» помещаем вызов:
где chunks/home/resourcesBlog.tpl чанк с именем resourcesBlog.tpl созданный в директории chunks/home/ . Кто работает не на файлах у вас просто «имя чанка». А в чанке следующий код:
2 вывода на одной странице, чтобы не дублировались ресурсы.
Задача: Есть новостной сайт там на главной странице сделано несколько вызовов ресурсов при помощи pdoResources. В верху выводятся ресурсы (4 штуки) у которых в TV «editorSelected» выбрано значение «4news». Имеет вызов:
А ниже выводятся 10 последних новостей. И нужно чтобы в 10 последних новостях, вывод следующий.
И часто в этот блок попадают новости из верхнего, нужно чтобы не выводились одинаковые ресурсы.
Решение.
Самое простое это исключить из выборки «4news»: &where=`<«editorSelected:NOT LIKE»:»4news»>`. Но редакторы каждый 2й ресурс помечают этим условие, следовательно ниже исключится примерно 5 свежих ресурсов — что тоже не хорошо. Поэтому решение 2.
Создаем сниппет «runn» со следующим содержимым.
Здесь rids собирает id выведенных ресурсов, а norids получается выводит id ресурсов через «-«.
Далее вызываем сниппет перед первым вызовом где 4 новости «[[runn]]».
А во второй вызов добавляем &resources=`[[+norids]]`.
Да точно таким же образом можно все вывести при помощи PdoPage и в добавок к тому если много ресурсов для вывода, то их можно разбить на страницы, об этом в следующем уроке: Вывод ресурсов при помощи pdoPage.
Понравилась статья? Можно поблагодарить автора: отправив ему донат на
Источник