pdoResources / Сниппеты / pdoTools / docs.modx.pro
Сниппет предназначен для вывода списка ресурсов. Является продвинутой заменой для getResources: обладает всеми его возможностями, но лишен недостатков.
Умеет правильно сортировать ТВ параметры, присоединять таблицы при выборке, включать и исключать категории из разных контекстов и еще много чего.
Параметры
Параметры выборки ресурсов
Эти параметры определяют, какие ресурсы появятся в генерируемом списке.
Название | По умолчанию | Описание |
---|---|---|
&parents | Текущий ресурс | Список родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. |
&depth | 10 | Глубина поиска дочерних ресурсов от родителя. |
&resources | Список ресурсов, через запятую, для вывода в результатах.![]() | |
&context | Ограничение выборки по контексту ресурсов. | |
&where | Массив дополнительных параметров выборки, закодированный в JSON. | |
&showHidden | 1 | Показывать ресурсы, скрытые в меню. |
&showUnpublished | 0 | Показывать неопубликованные ресурсы. |
&showDeleted | 0 | Показывать удалённые ресурсы. |
&hideContainers | 0 | Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1». |
&select | 0 | Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {«modResource»:»id,pagetitle,content»}. |
&sortby | pagetitle | Любое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs.![]() |
&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», вы получите плейсхолдеры [[+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.
Документация по pdoResources
Сниппет предназначен для вывода списка ресурсов. Является продвинутой заменой для getResources: обладает всеми его возможностями, но лишен недостатков.
Умеет правильно сортировать ТВ параметры, присоединять таблицы при выборке, включать и исключать категории из разных контекстов и еще много чего.
Параметры
Параметры выборки ресурсов
Эти параметры определяют, какие ресурсы появятся в генерируемом списке.
Название | По умолчанию | Описание |
---|---|---|
&parents | Текущий ресурс | Список родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. |
&depth | 10 | Глубина поиска дочерних ресурсов от родителя. |
&resources | Список ресурсов, через запятую, для вывода в результатах.![]() |
|
&context | Ограничение выборки по контексту ресурсов. | |
&where | Массив дополнительных параметров выборки, закодированный в JSON. | |
&showHidden | 1 | Показывать ресурсы, скрытые в меню. |
&showUnpublished | 0 | Показывать неопубликованные ресурсы. |
&showDeleted | 0 | Показывать удалённые ресурсы. |
&hideContainers | 0 | Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1». |
&select | 0 | Список полей для выборки, через запятую.![]() |
&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`.![]() |
|
&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 | Список ТВ параметров, которые нужно обработать перед выводом.![]() |
|
&tvPrefix | tv. | Префикс для ТВ параметров. |
&useWeblinkUrl | Генерировать ссылку с учетом класса ресурса, включает плейсхолдер . |
|
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | |
&toSeparatePlaceholders | Если вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры , и т.д. |
|
&showLog | 0 | Показывать дополнительную информацию о работе сниппета.![]() |
Примеры
Простейший вывод списка дочерних ресурсов документа с идентификатором 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.
- 2.98
- 1
- 2
- 3
- 4
- 5
Голосов: 808 | Просмотров: 12946
MODX — Как вывести популярные статьи
Урок, на котором рассмотрим, как с помощью сниппетов pdoTools создать виджет, отображающий на сайте 5 самых популярных статей за последние 7 дней.
Виджет «Популярные статьи» предназначен для отображения на сайте 5 самых просматриваемых страниц за последние 7 дней.
Визуально данный виджет выполним в виде панели (компонента panel) front-end фреймворка Twitter Bootstrap. Содержимое панели организуем в виде нумерованного списка статей в порядке их убывания по количеству просмотров за неделю.
Необходимые компоненты
Рассматривать создание блока «Самое популярное» будем для сайта, в котором статьи организованы на базе компонента Tickets. По умолчанию просмотры тикетов в компоненте Tickets ведутся только для зарегистрированных пользователей. Для того чтобы просмотры регистрировались и для незарегистрированных посетителей, необходимо включить опцию «tickets.count_guests» в настройках.
Кроме компонента Tickets, потребуется ещё компонент pdoTools. Данный компонент, содержит хороший набор сниппетов. В этой статье будем использовать из этого набора только сниппет pdoResources.
Таблицы TicketView и Ticket
Для создания запросов понадобятся 2 таблицы: TicketView и Ticket.
Первая таблица (TicketView) содержит записи о просмотренных пользователями тикетах. Она состоит из четырёх полей, но для выполнения запроса понадобятся только 2. Первое поле — это
parent
, оно хранит id
просмотренного пользователем тикета. Второе поле — это timestamp
, оно предназначено для хранения даты просмотра.
Вторая таблица (Ticket) будет основной. Она понадобится для того чтобы выбрать из неё необходимые ресурсы для которых будем подсчитывать количество просмотров.
Взаимосвязь между таблицами представим на следующей схеме:
Создание виджета осуществим за 2 шага:
- Напишем сниппет getDateWeekAgo, который будет возвращать дату, которая была 7 дней назад.
- Выберем и выведем необходимые ресурсы с помощью сниппета pdoResources и getTicket. Сравним время и ресурсы, затрачиваемые ими на обработку.
Создание сниппета getDateWeekAgo
Для создания сниппетов необходимо открыть в левой панели администрирования вкладку «Элементы» и нажать на значок «+» напротив надписи «Сниппеты». В открывшейся странице ввести следующее:
Выборка записей с помощью сниппета pdoResources
В качестве 1 способа выберем и выведем записи с помощью сниппета pdoResources. Для этого необходимо открыть нужный шаблон или чанк, и поместить в него следующий код:
<section> <div> <h5> <i></i> <span title="Самые популярные статьи и уроки за последние 7 дней">Популярные статьи</span> </h5> </div> <div> [[!pdoResources? &loadModels=`tickets` &class=`Ticket` &leftJoin=`{ "TicketView": { "class": "TicketView", "on": "Ticket.id = TicketView.parent" } }` &parents=`4` &where=`{"TicketView.timestamp:>":"[[!getDateWeekAgo]]"}` &select=`{ "Ticket": "Ticket.id as id, Ticket.uri as uri, Ticket.pageTitle as pagetitle", "TicketView": "COUNT(TicketView.parent) as countviews" }` &hideContainers=`1` &groupby=`Ticket.id` &sortby=`{"countviews":"desc"}` &tpl=`@INLINE <p><span>[[+idx]]</span> <a href="[[+uri]]">[[+pagetitle]]</a> <span><i></i><span title="Количество просмотров за последние 7 дней"> [[+countviews]]</span></span></p>` &limit=`5` ]] </div> </section>
Выборка записей с помощью сниппета getTickets
В качестве 2 способа рассмотрим выборку данных и их отображение с помощью сниппета getTickets.
<section> <div> <h5> <i></i> <span title="Самые популярные статьи и уроки за последние 7 дней">Популярные статьи</span> </h5> </div> <div> [[!getTickets? &leftJoin=`{ "TicketView": { "class": "TicketView", "on": "Ticket.id = TicketView.parent" } }` &parents=`4` &where=`{"TicketView.timestamp:>":"[[!getDateWeekAgo]]"}` &select=`{ "Ticket": "Ticket.id as id, Ticket.uri as uri, Ticket.pageTitle as pagetitle", "TicketView": "COUNT(TicketView.parent) as countviews" }` &hideContainers=`1` &groupby=`Ticket.id` &sortby=`{"countviews":"desc"}` &tpl=`@INLINE <p><span>[[+idx]]</span> <a href="[[+uri]]">[[+pagetitle]]</a> <span><i></i><span title="Количество просмотров за последние 7 дней"> [[+countviews]]</span></span></p>` &limit=`5` ]] </div> </section>
Поиск нужных ресурсов вышепредставленные сниппеты осуществляют с помощью параметра &parent
. Т.е. для того чтобы настроить виджет «Популярные статьи» на свой сайт, Вам достаточно изменить значение 4 на необходимое.
Сравнение результатов работы сниппетов
Как видно из результатов логов, сниппет pdoResources выбирает данные намного быстрее. Это связано с тем, что в запросе участвуют только нужные таблицы. В то время как сниппет getTickets дополнительно подключает ещё классы (таблицы) TicketsSection, modUser и modUserProfile.
pdoResources/Snippets/pdoTools/docs.modx.pro
Фрагмент для отображения списка ресурсов. Это расширенная замена getResources: имеет все функции, но без недостатков.
Умеет правильно отсортировать настройки телевизора, прикрепить таблицу с образцом, включить или исключить категории из разных контекстов и многое другое.
Свойства
Свойства выбора ресурсов
Эти свойства определяют, какие ресурсы будут отображаться в сгенерированном списке.
Имя | По умолчанию | Описание |
---|---|---|
&родители | Текущий ресурс | Список родителей, разделенных запятыми, для поиска результатов.![]() |
&глубина | 10 | Глубина поиска дочерних ресурсов от родительского в дереве ресурсов. |
&ресурсы | Разделенный запятыми список ресурсов для добавления к результатам. Если идентификатор ресурса начинается с дефиса, этот ресурс исключается из запроса. | |
&контекст | Ограничить ресурсы из данного контекста. | |
&где | Массив дополнительных параметров выбора в формате JSON. | |
Показать Скрытый | 1 | Показать ресурсы, скрытые в меню. |
&showUnpublished | 0 | Показать неопубликованные ресурсы.![]() |
&showDeleted | 0 | Показать ресурсы, помеченные как удаленные. |
&hideContainers | 0 | Исключить ресурсы контейнера, то есть ресурсы с «isfolder = 1». |
&выбрать | 0 | Список полей, разделенных запятыми, которые необходимо получить. Вы можете указать массив строк JSON, например, {«modResource»:»id,pagetitle,content»} . |
&сортировать по | заголовок страницы | Любое поле ресурса для сортировки, включая TV, если также установлено свойство &includeTVs . Вы можете указать строку JSON с массивом из нескольких полей, например {«tvname»:»ASC», «pagetitle»:»DESC»} . Для случайной сортировки используйте «RAND()». |
&сортировка | DESC | Направление сортировки: по возрастанию или по убыванию.![]() |
&предел | 10 | Ограничить количество результатов. Вы можете использовать «0» без ограничений. |
&смещение | 0 | Количество элементов для пропуска с самого начала. |
&первый | 1 | Номер первого элемента результатов вывода. |
и последний | Автоматический, по формуле (всего + первый — 1) | Номер последнего элемента результатов. |
&LoadModels | Разделенный запятыми список компонентов, модель которых необходимо загрузить для построения запроса. Пример: &loadModels=`ms2gallery,msearch3` . | |
&TVФильтры | Список фильтров на ТВ, разделенных И и ИЛИ. Указанный разделителем параметр &tvFiltersOrDelimiter представляет логическое условие ИЛИ на нем и условия, сгруппированные в первую очередь.![]() | |
&tvФильтры и разделитель | «,» | Разделитель условного И свойства &tvFilters . |
&tvFiltersOrDelimiter | «||» | Разделитель для свойства условного ИЛИ &tvFilters . |
Свойства шаблона
Эти свойства определяют фрагменты, содержащие шаблоны для форматирования генерируемого вывода.
Имя | Описание |
---|---|
&returnIds | Установите значение «1», чтобы вместо полных результатов возвращалась строка со списком идентификаторов ресурсов. Все шаблоны игнорируются. |
&tpl | Чанк имени для форматирования отдельных элементов. Если не указано, содержимое полей ресурса будет напечатано на экране. |
&tplFirst | Имя чанка для форматирования первого элемента в результатах. |
&tplLast | Имя чанка для форматирования последнего элемента в результатах. |
&tplOdd | Имя чанка для форматирования каждого нечетного элемента в результатах. |
&tplWrapper | Чанк — обертка, чтобы обернуть все результаты. Принимает один заполнитель: [[+output]] .![]() |
&wrapIfEmpty | Включает внешнюю оболочку чанка *&tplWrapper**, даже если нет результатов. |
&tplCondition | Определяет поле ресурса для оценки по ключам, определенным в свойстве &conditionalTpls . |
&tplОператор | Необязательный оператор для сравнения поля ресурса &tplCondition с массивом значений и в чанках &conditionalTpls . |
&условныйTpls | Объект JSON, определяющий карту значений полей и связанных фрагментов tpl для использования, когда поле, определенное &tplCondition соответствует значению. Оператор сравнения указан в &tplOperator . Для операторов типа isempty нельзя использовать массив ключей. |
&выходной разделитель | Необязательная строка для разделения результатов.![]() |
Свойства результата
Эти свойства дополнительно определяют, какие данные извлекать и как их отображать.
Имя | По умолчанию | Описание |
---|---|---|
&fastMode | 0 | Быстрый режим обработки чанков. Все необработанные теги (модификаторы вывода, фрагменты и т. д.) удаляются. |
&idx | Начальное количество итераций вывода. | |
&setTotal | 0 | Указывает, следует ли заполнять общий заполнитель числом результатов. |
&общая переменная | всего | Имя заполнителя для хранения общего количества результатов. |
&includeContent | 0 | Указывает, должно ли возвращаться в результатах поле «content» каждого ресурса. |
&включая телевизоры | Разделенный запятыми список значений переменных шаблона, которые должны быть включены в заполнители, доступные для каждого шаблона ресурса.![]() [[+tv.action]] и [[+tv.time]] . | |
&Подготовка телевизоров | «1», подготавливает все телевизоры, указанные в &includeTVs | Разделенный запятыми список значений TV, зависящих от медиа-источника, которые должны быть подготовлены перед выводом. |
&processTV | Разделенный запятыми список TV, которые должны быть обработаны в соответствии с их параметрами вывода. Если установлено значение «1», все телевизоры, перечисленные в списке &includeTVs будет обработан. | |
&tvPrefix | тв. | Префикс ТВ свойство. |
&схема | -1 | Тип схемы URL, передаваемой в modX::makeUrl(). См. здесь список допустимых опций. |
&useWeblinkUrl | 0 | Создать ссылку на ресурс веб-ссылки, а не на целевой URL.![]() [[+ссылка]] вместо [[~[[+id]]]] например. [[+pagetitle]] . |
&toPlaceholder | Сохранение вывода в заполнителе с этим именем вместо вывода вывода на экран. | |
&toSeparate Placeholders | Каждый элемент будет отображаться в заполнителе с именем, начинающимся с этого значения и заканчивающимся порядковым номером, начиная с нуля. Например, указав значение свойства «myPl», вы получите 9 заполнителей.0299 [[+myPl0]] , [[+myPl1]] и т. д. | |
&showLog | 0 | Показывать дополнительную отладочную информацию об обработке фрагмента только вошедшим в систему пользователям Manager. |
Примеры
Простой список дочерних элементов ресурса №1:
[[pdoResources? &родители=`1` &глубина=`0` &tpl=`ListRowTpl` ]]
Чтобы добавить телевизор с именем «изображение», тогда вызов будет следующим:
[[pdoResources? &родители=`1` &глубина=`0` &tpl=`ListRowTpl` &includeTVs=`изображение` ]]
Чанк ListRowTpl теперь позволяет использовать заполнитель [[+tv.
. image]]
фильтры pdoResources — Дополнительно — Сообщество MODX
Сообщество MODXсингаии
#1
Привет,
Я пытаюсь отсортировать некоторые результаты pdoressources со значением tv
мой телевизор — это радиокнопка (oui||non)
я пробовал это, но ничего не получаю
[[pdoResources? &родители=`12` &includeContent=`1` &limit=`[[*StartupTileNbrTV]]` &includeTVs=`SelectedStartupTV,HeaderImageTV,StartupPercentDoneTV,OldStartupTV` &tpl=`StartupTilesTpl` &sortby=`menuindex` &sortdirTV=`DESC` &where=`{"SelectedStartupTV:=":"non"}` ]]
ни с теми
&where=`{"OldStartupTV.value":"non"}`
или
&tvFilters=`OldStartupTV==non`
странно, потому что этот код работает:
[[pdoResources? &родители=`12` &includeContent=`1` &limit=`[[*StartupTileNbrTV]]` &includeTVs=`SelectedStartupTV,HeaderImageTV,StartupPercentDoneTV` &tpl=`SelectedStartupTpl` &where=`{"SelectedStartupTV:=":"oui"}` &sortby=`menuindex` &sortdirTV=`DESC`]]
я нашел этот протектор интересным, но я не могу заставить его работать для меня
https://forums.modx.com/thread/92071/pdoresources-and-tvfilters
я ищу пример &where и &tvfilter с оператором, но могу не могу найти что-то актуальное
ilja-web
#2
сингаии:
&where=
{"SelectedStartupTV:=":"oui"}
Возможно, у вас неправильный JSON, попробуйте: &where= {"SelectedStartupTV":"oui"}
. Кроме того, проверьте, правильно ли вы задали имя радио. Также может быть, что значение SelectedStartupTV не «oui», а «on».
сингаии
#3
Спасибо за ответ.
я использую pdofield для получения значения TV:
[[pdofield? &id=`41` &field=`OldStartupTV`]] [[пдофилд? &id=`22` &field=`OldStartupTV`]]
эти два ресурса имеют разное значение содержимого для кнопки tv, и я получаю «oui» и «non» (по-французски «да» и «нет») в результате
я действительно запутался, потому что затем я тестирую этот код
[[pdoResources? &родители=`12` &includeContent=`1` &limit=`[[*StartupTileNbrTV]]` &includeTVs=`SelectedStartupTV,HeaderImageTV,StartupPercentDoneTV,OldStartupTV` &tpl=`StartupTilesTpl` &sortby=`menuindex` &sortdirTV=`DESC` &where=`{"OldStartupTV":"non"}` ]]
, и он возвращает пустой результат
, и когда я тестирую этот:
[[pdoResources? &родители=`12` &includeContent=`1` &limit=`[[*StartupTileNbrTV]]` &includeTVs=`SelectedStartupTV,HeaderImageTV,StartupPercentDoneTV,OldStartupTV` &tpl=`StartupTilesTpl` &sortby=`menuindex` &sortdirTV=`DESC` &where=`{"OldStartupTV":"oui"}` ]]
я получил хороший результат…
это странно !!!
бобрай
#4
Попробуйте:
где=`{"OldStartupTV":"1"}
Да/Нет Телевизоры хранятся в базе данных как 0 и 1, а PdoResources может использовать необработанные значения.
сингаии
#5
Бобрай:
где=`{«OldStartupTV»:»1″}
я попробовал, и я получил все ресурсы без сортировки.
я пытаюсь обработать результат необработанного значения
&processTVs=`1`
но тоже не работает
singaii
#6
У меня работает с getRessources
[[getResources? &родители=`12` &includeContent=`1` &limit=`[[*StartupTileNbrTV]]` &includeTVs=`1` &tpl=`StartupTilesTpl` &sortby=`menuindex` &sortdir=`DESC` &processTVs=`1` &tvFilters=`OldStartupTV==нет` ]]
и жесткий
#7
Я заметил, что во всех случаях вы называете сниппеты некэшированными.
[[pdoResources? или же [[получить ресурсы?
Если вы назовете их некэшированными, получите ли вы ожидаемые результаты?
[[!pdoResources? или же [[!получить ресурсы?
сингаии
#8
спасибо,
Я пытаюсь раскешировать pdoressources,
[[!pdoResources? &родители=`5` &includeContent=`1` &limit=`[[*StartupTileNbrTV]]` &includeTVs=`SelectedStartupTV,HeaderImageTV,StartupPercentDoneTV,OldStartupTV` &tpl=`StartupTilesTpl` &sortby=`menuindex` &sortdirTV=`DESC` &processTVs=`1` &where=`{"OldStartupTV":"1"}` ]]
, но я ничего не получил: код не был сгенерирован
(я изменил папку ресурсов, но это только для очистки дерева)
в этом случае я получил что-то
[[pdoResources? &родители=`5` &includeContent=`1` &limit=`[[*StartupTileNbrTV]]` &includeTVs=`SelectedStartupTV,HeaderImageTV,StartupPercentDoneTV,OldStartupTV` &tpl=`StartupTilesTpl` &sortby=`menuindex` &sortdirTV=`DESC` &processTVs=`1` &where=`{"OldStartupTV:>":"non"}` ]]
[[pdoResources? &родители=`5` &includeContent=`1` &limit=`[[*StartupTileNbrTV]]` &includeTVs=`SelectedStartupTV,HeaderImageTV,StartupPercentDoneTV,OldStartupTV` &tpl=`StartupTilesTpl` &sortby=`menuindex` &sortdirTV=`DESC` &processTVs=`1` &where=`{"OldStartupTV:=":"oui"}` ]]
с тем, у меня есть выбранные ресурсы, но тот, который мне не нужен
с
&where=`{"OldStartupTV:>":"oui"}`
или
&where=`{"OldStartupTV:=":"non"}`
у меня ничего нет …
бобрай
#9
Вот что еще можно попробовать:
&where=`{"OldStartupTV.value:=":"oui"}`
Кроме того, в старом сообщении говорилось, что pdoResources неправильно обрабатывает телевизоры, установленные на их значение по умолчанию. . Я не знаю, так ли это по-прежнему, но если это так, и телевизор имеет значение по умолчанию «oui» или «non», это может быть вашей проблемой.
Основная причина заключается в том, что для TV, для которых установлено значение по умолчанию, нет записи в таблице, которая содержит значения TV для определенных ресурсов, где pdoResources ищет (или использовал для поиска) значения.
Одним из решений было бы переключиться на getResources и использовать его свойство &tvFilters.
сингаии
#10
Я понимаю трюки со значением по умолчанию, это одно из первых, что я делаю: иду к каждому значению изменения ресурса и сохраняю и изменяю значение во второй раз на всякий случай.
это дает мне результат я не хочу
&where=`{"OldStartupTV.value:=":"oui"}`
и это мне ничего не дает
&where=`{"OldStartupTV.value:=" :"non"}`
Я не люблю ошибаться в чем-то подобном, но у меня нет ни компетенции, ни времени, чтобы идти дальше. Спасибо всем за самоотверженную помощь. я буду придерживаться getressources для этого
jnogueira
905:50 #11Привет, @singaii,
Думаю, тебе пока не стоит сдаваться.
Посмотрим, смогу ли я чем-нибудь помочь.
Я использую pdoTools для всего, что я пишу с помощью Modx, и это отличное дополнение. Никогда не нашел ничего, что не работало должным образом.
Некоторые подсказки с моей стороны:
- Нам нужно знать, как детализируется ваш телевизор, но я бы предположил, что телевизор представляет собой окно списка (одиночный выбор) со значениями параметров ввода:
Oui==1|| Не==0 903:00
- Тип вывода телевизора должен быть текстовым
- Затем попробуйте отредактировать значение для этого ТВ, сохраните ресурс и проверьте непосредственно в базе данных, как он хранится в таблице
modx_site_tmplvar_contentvalues
.Поле «значение» — это то место, откуда вы должны направлять фильтр запроса.
- Затем при вызове pdoResources вам нужно фильтровать следующим образом:
&where=`{"OldStartupTV":"1"}`
Пропуск оператора аналогичен указанию OldStartupTV=1
У меня несколько ситуаций с точно таким же сценарием.
Пожалуйста, свяжитесь со мной, если вам нужна помощь.
Здоровья и удачи!
BR,
JNogueira
Бобрай
#12
&where=
{"OldStartupTV":"1"}
Кажется, я писал это в этой теме около недели назад.
где=
{"OldStartupTV":"1"}`
Сообщается, что это не сработало для ОП.
Жногейра
№13
Привет, Боб,
Вы правы, извините. Быстро пробежался глазами по теме и пропустил. Извините за двойной пост.
бобрай
№14
Не беспокойтесь. Это все еще хороший ответ.
сингаии
№15
Привет, извините за задержку.
Я попробую Oui==1||Non==0
Дело в том, что я не помню, чтобы это было возможно (даже оно помечено серым цветом под свойством телевизора)
Я использую modx какое-то время, но я не сканируйте базу данных слишком много, после быстрого поиска по modx_site_tmplvar_contentvalues
он содержит только значение или значение
(почему?).
Я попробую это сегодня, но мне нужно изменить тип моего телевизора (сменить клиент), поэтому может быть больше не радиокнопка, а выпадающий список.
возможно какие-то новости через несколько часов.
Спасибо всем за улучшение моих знаний о modx,
1 Нравится
илья-веб
№16
Прошло несколько недель, а вы уже примерили вместо вас?
Бобрай
# 17
… после быстрого поиска по
modx_site_tmplvar_contentvalues
это содержание толькоили значение
(почему?).
В этой таблице каждая запись хранит только одну выбранную опцию этого телевизора для одного конкретного ресурса. (В этой таблице ничего не сохраняется, если для TV установлено значение по умолчанию.)
Полный список опций находится в поле свойств в таблице объектов TV (modx_site_tmplvars).
сингаии
# 18
Я заставляю это работать!
Oui==1||Non==0
для флажка
Non selectionné==1||Séléctionné==2||Inscrite à l'émission==3||En finale==4||Archivee== 5
для одного списка выбора, и он работает с этим стилем кода для pdoressources:
[[pdoResources? &родители=`5` &includeContent=`1` &limit=`[[*StartupTileNbrTV]]` &includeTVs=`HeaderImageTV,StartupStateTV,MakeitFirstStartupTV` &tpl=`StartupTilesTpl` &sortby=`menuindex` &where=`{"StartupStateTV":"2"}` ]]
, и я даже сделал свой первый фрагмент, чтобы получить имя выбранного элемента списка! :
Статус : [[+tv.
StartupStateTV:StartupStatus]]
и фрагмент StartupStatus
Мне нужно изменить имя этого фрагмента в «showstatus», чтобы было достаточно ясно, но это работает.
Спасибо всем за помощь.
Мне действительно нужно сделать больше проектов веб-разработки, чтобы улучшить свои навыки в modx!
чем больше копаю, тем больше интересного нахожу1 Нравится
2 июля 2019 г., 18:30
# 19
Бобрай:
Не беспокойтесь.
Это все еще хороший ответ.
Спасибо за работу
Руководство Боба | Отсутствующие телевизоры с помощью getResources или pdoResources
В предыдущей статье мы рассмотрели, как сделать так, чтобы форумы MODX не ели ваши галочки. В этом мы рассмотрим некоторые причины, по которым getResources и pdoResources могут не отображать ваши значения TV.
Проблема
Предположим, у вас есть вызов getResources или pdoResources, который содержит теги TV в фрагменте Tpl, но некоторые или все значения TV не отображаются или выглядят не так, как должны. Это может происходить по нескольким причинам. Следующие проблемы будут возникать как с getResources, так и с его более быстрой заменой pdoResources.
Я буду ссылаться на getResources в разделах ниже, но помните, что большинство пунктов в равной степени относится и к pdoResources. Если есть различия между ними, я расскажу вам о них.
Телевизоры не подключены к шаблону
Если телевизор не подключен к шаблону текущего ресурса, getResources не сможет получить к нему доступ.
Эта ошибка довольно редкая, так как вы заметите, что телевизор отсутствует, когда редактируете ресурс.
Проблемы с разрешениями
Если телевизор защищен записью ACL для доступа к категории элементов, а текущий пользователь не имеет надлежащего доступа, попытки доступа к телевизору могут завершиться неудачно. Точно так же, если телевизор содержит ссылку на защищенный медиа-источник, попытка доступа к нему также может завершиться неудачно.
У вас может быть разрешение на установку значения TV, но у пользователя, посещающего внешний интерфейс, нет.
&includeTVsЭто свойство должно быть установлено, если в чанке Tpl есть теги TV. Использование этого свойства отличается для getResources и pdoResources. Для getResources свойство должно быть
`0`
или`1`
(значение по умолчанию`0`
). Если это все, что вы сделаете, getResources подготовит установку заполнителей для всех телевизоров, подключенных к ресурсу.Если у вас много телевизоров, но будут отображаться только некоторые из них, вы можете ускорить процесс, добавив свойство
&includeTVList
, которое должно содержать разделенный запятыми список, содержащий имена телевизоров, которые вам нужно показать.Для pdoResources есть только одно свойство,
&includeTVs
, который должен содержать разделенный запятыми список имен телевизоров, которые вы хотите показать.
&prepareTVsЕсли ваши телевизоры подключены к источнику мультимедиа, это свойство указывает MODX предпринять необходимые шаги для правильного отображения значения TV. Как и в случае с
&includeTVs
выше, getResources подготовит все телевизоры, если вы используете&prepareTVs=`1`
. Он подготовит только те, которые вы хотите подготовить, если вы используете&prepareTVList
со списком названий телевизоров, разделенных запятыми.Для pdoResources список имен телевизоров, разделенных запятыми, находится в свойстве
&processTVs&prepareTVs
.Если вам нужно обработанное значение TV, а не необработанное значение, хранящееся в значении TV, необходимо включить это свойство. Например, если у вас есть изображение TV и вы ожидаете, что полный HTML-тег изображения заменит местозаполнитель, вам нужно запросить обработанное значение TV.
Опять же, getResources принимает два свойства:
&processTVs=`1`
и&processTVList
со списком разделенных запятыми TV, которые необходимо обработать.Тег фрагмента pdoResources принимает одно свойство,
&processTVs
со списком имен телевизоров, разделенных запятыми.При использовании getResources второе свойство в каждой паре (
&includeTVList
,&prepareTVList
и&processTVList
) является необязательным. Тем не менее, рекомендуется всегда использовать их, потому что включение, подготовка и обработка телевизоров — это относительно медленный процесс, и нет смысла заставлять MODX выполнять те операции на телевизорах, которые вы не будете отображать.Это не проблема с pdoResources, так как вам нужно указать TV, которые вы хотите включить, подготовить и/или обработать в теге pdoResources.
&tvPrefixЭто тот, который чаще всего сбивает людей с толку. И для getResources, и для pdoResources префикс по умолчанию —
tv.
. Вам нужно не только включить его в имена ваших телевизоров, но и в свойства выше.Это вопрос личных предпочтений, но редко когда есть причина включать ТВ-префикс. Единственный случай, о котором я могу думать, это если у вас есть телевизор с тем же именем, что и поле ресурса (например, телевизор с именем
содержание
илиописание
), и эти телевизоры можно легко переименовать, чтобы избежать коллизий.Добавление префикса к каждому TV требует времени, и легко забыть добавить префикс при указании TV в свойствах выше, поэтому я рекомендую никогда не использовать префиксы TV и *всегда* включать это свойство в ваши getResources или pdoResources тег:
&tvPrefix=``Если у ваших телевизоров нет префикса и вы не установили
&tvPrefix
, как показано выше, ваши телевизоры не будут отображаться в результатах.Готовится
В следующей статье мы рассмотрим, как включить другие дополнительные функции в транспортный пакет.
Для получения дополнительной информации о том, как использовать MODX для создания веб-сайта, см. руководство Боба на моем веб-сайте или, что еще лучше, купите мою книгу: MODX: Официальное руководство .
Ищете качественный хостинг для MODX? По состоянию на май 2016 г. гиды Боба размещаются на хостинге A2. (Дополнительная информация в поле ниже.)
Предыдущая статья << —— >> Следующая статья
ПОДПИСАТЬСЯ, чтобы получать уведомления о новых сообщениях в блоге.
Для получения информации о том, как использовать MODX для создания веб-сайта (и других тем), посетите мой основной веб-сайт Bob's Guides или, что еще лучше, купите мою книгу: MODX: Официальное руководство .
Ищете качественный хостинг для MODX? По состоянию на май 2016 г.