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

Содержание

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

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

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

Параметры

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

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

НазваниеПо умолчаниюОписание
&parentsТекущий ресурсСписок родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&depth10Глубина поиска дочерних ресурсов от родителя.
&resourcesСписок ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&contextОграничение выборки по контексту ресурсов.
&whereМассив дополнительных параметров выборки, закодированный в JSON.
&showHidden1Показывать ресурсы, скрытые в меню.
&showUnpublished0Показывать неопубликованные ресурсы.
&showDeleted0Показывать удалённые ресурсы.
&hideContainers0Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1».
&select0Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {«modResource»:»id,pagetitle,content»}.
&sortbypagetitleЛюбое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs.
Можно указывать JSON строку с массивом нескольких полей, например {«tvname»:»ASC», «pagetitle»:»DESC»}. Для случайно сортировки укажите «RAND()»
&sortdirDESCНаправление сортировки: по убыванию или возрастанию.
&setTotal0Отключение выборки total по умолчанию (с версии 2.11.0). Сниппет pdoPage включает его всегда.
&limit10Ограничение количества результатов выборки. Можно использовать «0».
&offset0Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit
&first1Номер первой итерации вывода результатов.
&lastАвтоматически, по формуле (total + first — 1)Номер последней итерации вывода результатов.
&loadModelsСписок компонентов, через запятую, чьи модели нужно загрузить для построения запроса. Например: &loadModels=`ms2gallery,msearch3`.
&tvFiltersСписок фильтров по ТВ, с разделителями AND и OR. Разделитель, указанный в параметре &tvFiltersOrDelimiter представляет логическое условие OR и по нему условия группируются в первую очередь. Внутри каждой группы вы можете задать список значений, разделив их &tvFiltersAndDelimiter. Поиск значений может проводиться в каком-то конкретном ТВ, если он указан «myTV==value», или в любом «value». Пример вызова: &tvFilters=`filter2==one,filter1==bar%||filter1==foo`. Обратите внимание: фильтрация использует оператор LIKE и знак «%» является метасимволом. И еще: Поиск идёт по значениям, которые физически находятся в БД, то есть, сюда не подставляются значения по умолчанию из настроек ТВ.
&tvFiltersAndDelimiter«,»Разделитель для условий AND в параметре &tvFilters.
&tvFiltersOrDelimiter«||»Разделитель для условий OR в параметре &tvFilters.

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

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

НазваниеОписание
&returnIdsУстановите значение «1», чтобы вернуть строку со списком id ресурсов, вместо оформленных результатов. Все указанные шаблоны игнорируются.
&tpl
Имя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран.
&tplFirstИмя чанка для первого ресурса в результатах.
&tplLastИмя чанка для последнего ресурса в результатах.
&tplOddИмя чанка для каждого второго ресурса (хоть «odd» значит «нечётный», работает для чётных ресурсов).
&tplWrapperЧанк-обёртка, для заворачивания всех результатов. Понимает один плейсхолдер: [[+output]]. Не работает вместе с параметром &toSeparatePlaceholders.
&wrapIfEmptyВключает вывод чанка-обертки &tplWrapper даже если результатов нет.
&tplConditionПоле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls.
&tplOperatorНеобязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls.
&conditionalTplsJSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей.
&outputSeparatorНеобязательная строка для разделения результатов работы.

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

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

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

Примеры

Простейший вывод списка дочерних ресурсов документа с идентификатором 1:

[[pdoResources?
    &parents=`1`
    &depth=`0`
    &tpl=`ListRowTpl`
]]

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

[[pdoResources?
    &parents=`1`
    &depth=`0`
    &tpl=`ListRowTpl`
    &includeTVs=`image`
]]

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

Дополнительная информация

При переносе чанков с getResources, довольно распространённой ошибкой является использование модификатора strtotime, для форматирования даты.

Дело в том, что даты ресурсов и так хранятся в виде timestamp, но конвертируются в нормальные даты из-за использования объектов modResource — так запрограммировано в его свойствах. А потом, для форматирования даты, их нужно перевести обратно в timestamp. Выходит двойная ненужная конвертация.

pdoTools же работает напрямую с базой данных, без создания объектов и конвертации их значений, поэтому в чанк приходит timestamp, который не нужно дополнительно обрабатывать. Вы можете сразу применять модификатор

date к значениям:

[[+publishedon:date=`%d.%m.%Y`]]
или
[[+createdon:date=`%Y-%m-%d`]]

Это касается работы с датами ресурсов и в других сниппетах pdoTools.

Документация по 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.

  • 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 шага:

  1. Напишем сниппет getDateWeekAgo, который будет возвращать дату, которая была 7 дней назад.
  2. Выберем и выведем необходимые ресурсы с помощью сниппета 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: имеет все функции, но без недостатков.

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

Свойства

Свойства выбора ресурсов

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

Имя По умолчанию Описание
&родители Текущий ресурс Список родителей, разделенных запятыми, для поиска результатов. Установите на 0 для неограниченного, на +0 для верхнего уровня. Если родительский идентификатор начинается с тире, он и его дочерние элементы исключаются из запроса.
&глубина 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 представляет логическое условие ИЛИ на нем и условия, сгруппированные в первую очередь. Внутри каждой группы можно указать список значений, разделенных &tvFiltersAndDelimiter . Поиск значений может производиться в любом конкретном ТВ, если указано «myTV == значение», или в любом «значении». Пример вызова: &tvFilters=`filter2==one,filter1==bar%||filter1==foo` . Обратите внимание: в фильтре используется оператор LIKE, а символ «%» является метасимволом. Это будет искать значения для ресурсов, которые находятся в таблице site_tmplvar_contentvalues, а не из настроек телевизора по умолчанию.
&tvФильтры и разделитель «,» Разделитель условного И свойства &tvFilters .
&tvFiltersOrDelimiter «||» Разделитель для свойства условного ИЛИ &tvFilters .

Свойства шаблона

Эти свойства определяют фрагменты, содержащие шаблоны для форматирования генерируемого вывода.

Имя Описание
&returnIds Установите значение «1», чтобы вместо полных результатов возвращалась строка со списком идентификаторов ресурсов. Все шаблоны игнорируются.
&tpl Чанк имени для форматирования отдельных элементов. Если не указано, содержимое полей ресурса будет напечатано на экране.
&tplFirst Имя чанка для форматирования первого элемента в результатах.
&tplLast Имя чанка для форматирования последнего элемента в результатах.
&tplOdd Имя чанка для форматирования каждого нечетного элемента в результатах.
&tplWrapper Чанк — обертка, чтобы обернуть все результаты. Принимает один заполнитель: [[+output]] . Он не работает в сочетании с &toSeparatePlaceholders .
&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 список имен телевизоров, разделенных запятыми, находится в свойстве &prepareTVs .

&processTVs

Если вам нужно обработанное значение 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 г.

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

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