Modx pdoresources: pdoResources / Snippets / pdoTools / docs.modx.pro

Замена getResources на pdoResources в MODX Revolution

Категория: Разработка сайтов

Вчера решил попробовать заменить на сайте вывода ресурсов с «getResources» на «pdoResources». Результат превзошел все ожидания. Время загрузки кешируемой главной страницы уменьшилось с 1.1 сек до 0.76 сек.

Переход занимает менее 10 минут. Достаточно установить из репозитория пакет pdoTools (про пакет «pdoTools» и остальные его сниппеты я написал отдельную статью — pdoTools в MODX Revoluton — замена стандартных сниппетов) и сделать несколько правок.

Меняем название getResources на pdoResources

Само собой разумеющийся пункт и здесь хотелось бы лишь отметить, что если для вывода ресурсов у вас используется постраничная навигация («getPages»), то это никак не помешает переходу. Точно так же применяйте вместо элемента вывода getResources — pdoResources. Различие в параметрах будет лишь одно. О нем ниже.

Включение TV параметров в вывод

В «getResources» указывается значение 1 если требуется включать TV параметры в результат вывода и 0, если не требуется:


&includeTVs=`1`

В «pdoResources» необходимо указывать имена TV параметров через запятую:


&includeTVs=`img-news,tags`

Вывод даты публикации ресурса

В getResources:

Опубликовано: [[+publishedon:strtotime:date=`%d %b %Yг. в %H:%M`]]

В pdoResources убираем промежуточную функцию «strtotime»:

Опубликовано: [[+publishedon:date=`%d %b %Yг. в %H:%M`]]

Замена «getResourcesTag»

Вместе с «getResources» идет сниппет «getResourcesTag», который выводит ресурсы по тегу. «pdoResources» может заменить и его. Я реализовал замену включением в «pdoResources» следующего параметра:


&where=`{"tags:LIKE":"%[[!getUrlParam? &name=`tag`]]%"}`

Он указывает на то, что требуется вывести только те статьи, у которых в TV-поле «tags» встречается слово, передаваемое в адресной строке в параметре «tag».

Для получения этого параметра я использую snippet «getUrlParam». Устанавливается он из репозитория как обычный пакет. Он предназначен для вывода значения переменной, передаваемой в адресной строке методом GET.

Параметр «conditionalTpls»

Этот пункт здесь лишний, так как данный параметр есть как у первого сниппета, так и у второго. Однако, узнал я о его существовании только когда начал разбираться c «pdoResources».

  • &conditionalTpls — параметр применяется в сниппетах pdoResources/getResources при необходимости осуществить вывод отдельных ресурсов в «свои» чанки:

    
    [[!pdoResources? 
        &parents=`2` 
        &tpl=`chunk1` 
        &tplCondition=`pagetitle` 
        &tplOperator=`==` 
        &conditionalTpls=`{"Статья 2":"chunk2", "Статья 5":"chunk3"}` 
    ]]
    
  • &tplCondition — Поле ресурса, из которого будет получено значение для выбора чанка по условию в «conditionalTpls». Например: pagetitle или alias.

  • &tplOperator — оператор сравнения, возможный список: ==, !=, , =, empty, !empty, isnull

  • &conditionalTpls — строка с массивом, в котором указано то, с чем будет сравниваться «tplCondition», а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешным.

pdoResources как замена getResources / Сниппеты / Modx Revolution / Технический блог веб-разработчика

Ближайший аналог этих сниппетов в Evo — это Ditto. Используются для вывода дочерних ресурсов текущего документа, но можно указать и определённого родителя. Как пример, такое можно встретить в блоге — когда выводятся все записи определённой категории. pdoResources гораздо функциональнее и шустрее getResources, поэтому я его больше рекомендую к использованию. Различия в использовании параметров данных снипетов минимальны, поэтому переход на pdoResources будет безболезненным. Там же, где всё-таки есть небольшие нюансы, об этом будет написано отдельно. 

Основные параметры

getResources (значение по умолчанию) pdoResources (значение по умолчанию) Применение

&parents=`[[*id]]`

&parents=`[[*id]]`

Список родителей, из которых будут выводиться дочерние ресурсы (указываются через запятую). Если перед именем ресурса поставить дефис, то такой ресурс будет исключаться из выборки.  

&resources

&resources Список ресурсов для вывода. При указании дефиса, ресурс исключается из выборки. 

&depth=`10`

&depth=`10` Глубина выборки от родителя. 

&tvFilters

&tvFilters

Фильтрация ресурсов по значениям TV.


В качестве разделителя AND используется «,»
В качестве разделителя OR используется «||»

Примеры вызова: 
&tvFilters=`color==red||color==yellow` — TV может принимать одно из двух значений, 
&tvFilters=`color==red,size==small` — одно из значений TV равно red, другое равно small,
&tvFilters=`color==red||color==yellow,size==small||size=big` — комбинируем перечисленные выше два варианта, что так же допускается. 

Фильтрация для поиска использует оператор LIKE, поэтому можно писать так: 
&tvFilters=`mytv==А%` — название TV начинается на А. 

pdoResources. Можно использовать кастомные разделители значений. Задаются в параметрах tvFiltersOrDelimiter=`||`tvFiltersAndDelimiter=`,`— разделители для «ИЛИ» и «И» соответственно. 
  

&sortby=`createdon`

&sortby=`pagetitle`

Поле ресурса, по которому будет происходить сортировка.
Сортировка в случайном порядке:
&sortby=`RAND()`
Так же, можно указывать JSON массив сразу из нескольких полей:
&sortby=`{«pagetitle»:»ASC»,»menuindex»:»DESC»}`

pdoResources. Eсли в параметрах свойства includeTVs перечислены значения TV, то возможна сортировка и по ним.  

getResources. Для сортировки по TV параметрам и задания направления используются параметры sortbyTV и sortdirTV соответственно. 

&sortdir=`DESC`

&sortdir=`DESC`

Направление для сортировки. 

&limit=`5`

&limit=`10`

Ограничение по количеству результатов.

&offset=`0`

&offset=`0`

Пропуск результатов от начала. 

&where

&where

Ограничение выборки по тем или иным параметрам. Представляет собой строку, закодированную в JSON.

&context

&context

Ограничение выборки по контексту.

Дополнительные параметры

getResources (значение по умолчанию) pdoResources (значение по умолчанию) Применение

&showUnpublished=`0`

&showUnpublished=`0`

Показывать ли неопубликованные ресурсы. 

&showDeleted=`0`

&showDeleted=`0` Показывать ли ресурсы, помеченные как удалённые.

&showHidden=`0`

&showHidden=`0` Показывать ли ресурсы, у которых стоит галочка «Не показывать в меню».

&hideContainers=`0`

&hideContainers=`0` Показывать ли ресурсы, которые являются контейнерами.  

&includeContent=`0`

&includeContent=`0` Подгружать ли поле content.

&includeTVs=`0`

&includeTVs

В параметрах указываем TV, которые так же будут доступны. В чанке доступ к TV будет доступен через плэйсхолдеры с префиксом tv. Например, [[+tv.price]]

&prepareTVs=`1`

&prepareTVs=`1`

Список TV-параметров, которые нужно подготовить перед выборкой. 1 означает — подготовить все TV.

&processTVs=`0`

&processTVs

Список TV, которые будут обработаны перед выводом. 
pdoResources. Если поставить 1, то будут обработаны все TV, указанные в includeTVs.

&tvPrefix=`tv.`

&tvPrefix=`tv. `

Префикс для TV параметров. 

&idx=`1`

&idx

Цифра, с которой будет начинаться итерируемый плейсхолдер [[+idx]]

&totalVar=`total`

&totalVar=`total`

Имя плейсхолдера, в котором будет храниться общее количество результатов. 

debug=`false`

&showLog=`0`

Будет ли выведена информация, отвечающая за отладку. Какие SQL запросы были выполнены и т. д. 

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

getResources (значение по умолчанию) pdoResources (значение по умолчанию) Применение

&tpl

&tpl

Имя чанка ресурса. Если не указано, то будет выведено содержимое всех полей.  

&tplOdd

&tplOdd
Имя чанка для чётных ресурсов. 

&tplFirst

&tplFirst Имя чанка для первого ресурса. 

&tplLast

&tplLast Имя чанка для последнего ресурса.

&tplCondition

&tplCondition Поле ресурса, в котором будет содержаться значение для выбора чанка по условию, заданному в параметре conditionalTpls

&conditionalTpls

&conditionalTpls

JSON-строка с массивом, ключом которого будет выступать строка, которая будет сравниваться с полем, указанным в параметре tplCondition. А в качестве значения ключа будет выступать имя чанка, который будет использован, если условие выполнится. 

pdoResources. Оператор сравнения можно дополнительно указать в параметре tplOperator. 

&tplWrapper

&tplWrapper

Чанк-обёртка, в котором будут выводиться все ресурсы. [[+output]] — плэйсхолдер всех результатов. 
Примечание. Не работает с параметром &toSeparatePlaceholders

&wrapIfEmpty=`false`

&wrapIfEmpty

Если в качестве значения указать 1, то принудительно выводит чанк, указанный в параметре tplWrapper,  даже если результатов нет. 

&outputSeparator=`\n`

&outputSeparator

Строка для разделения результатов вывода. 

&toPlaceholder

&toPlaceholder

Если не пусто, то сниппет вместо вывода на экран, сохранит все результаты в плэйсхолдер.  

&toSeparatePlaceholders

&toSeparatePlaceholders

Если заполнить значение данного параметра, то вместо плэйсхолдера со всеми результатами, на выходе получится множество плэйсхолдеров, которые начинаются со значения, указанного вами в данном параметре. А после этого параметра будет идти порядковый номер результата плэйсхолдера. 

Примеры работы

Самый простой вызов, с необходимым минимумом параметров:

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

Когда необходимо подключить дополнительный TV при выводе: 

[[!pdoResources?
  &parents=`1`
  &depth=`0`
  &tpl=`catalog_item`
  &includeTVs=`price`
]]

Сортируем элементы по индексу (порядок расположения в дереве элементов):

[[!pdoResources?
   &tpl=`item_cat_second`
   &depth=`0`
   &parents=`9`
   &sortby=`menuindex`
   &sortdir=`ASC`
]]

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 и проверка общей стоимости — Extras

Код должен показывать другой арт от художника. Это в шаблоне Art.
У меня есть:

 [[!pdoResources?
&родители=`6`
&showLog=`0`
&глубина=`1`
&sortby=`{"artid":"ASC"}`
&includeTVs=`ArtistsID,ArtTitle,artid`
&where=`{ "ArtistsID:=" : "[[*ArtistsID]]", "AND:artid:!=" : "[[*artid]]" }`
&returnIds=`0`
&toPlaceholder=`Больше списков`
&setTotal=`1`
&tpl=`Артлистинг`
]]

Всего: [[+всего]]

[[+total:greaterthan=`0`:then=`ПОКАЖИТЕ МЕНЯ`:else=`СКРЫТЬ МЕНЯ`]]

[[+MoreListings]]

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

Итого, я получаю 1 и HIDE ME

Журналы:

0.0000751: загружен pdoTools 0.0000210: создан объект запроса xPDO 0.0006931: Включенный список телевизоров: **artid, ArtistsID, ArtTitle** 0. 0001431: левое соединение * modTemplateVarResource* as **TVartid** 0.0000870: leftJoined *modTemplateVarResource* as **TVartistsid** 0.0000830: leftJoined *modTemplateVarResource* as **TVarttitle** 0.0001402: Добавлен выбор **modResource** : SQL_CALC_FOUND_ROWS id , type , contentType , pagetitle , longtitle , description , alias , alias_visible , link_attributes , опубликовано , pub_date , unpub_date , родитель , isfolder , интротекст , форматированный текст , шаблон , индекс меню , с возможностью поиска , с возможностью кэширования , создано , создано на , отредактировано , отредактировано на , удалено , удалено на , удалено на , опубликовано на , 9 0300 опубликовано , menutitle , donthit , privateweb , privatemgr , content_dispo , hidemenu , class_key , context_key , content_type , uri , uri_override , hide_children_in_tree , show_in_tree , properties 0. 0000069: Добавлен выбор **modTemplateVarResource**: IFNULL( value , '') AS tv.artid 0.0000050: Добавлен выбор of **modTemplateVarResource**: IFNULL( value , '') AS tv.ArtistsID 0.0000041: Добавлен выбор **modTemplateVarResource**: IFNULL( value , ' ') AS tv.ArtTitle 0,0000260: Заменены условия ТВ 0,0004599: Обработаны дополнительные условия 0.0006661: Добавлено где условие: ** TVartistsid . значение :== 4, И: TVartid . значение :!==A23, modResource.parent:IN(6,7,8,9), modResource.published=1, modResource.deleted=0** 0,0000100: Заменены условия ТВ 0,0000720: Отсортировано по ** TVartid . значение **, **ASC** 0,0000019: ограничено **10**, смещение **0** 0,0003080: SQL подготовлен "SELECT SQL_CALC_FOUND_ROWS modResource . идентификатор , modResource . введите , modResource . contentType , modResource . pagetitle , modResource . длинное название , modResource . описание , modResource . псевдоним , modResource . alias_visible , modResource . link_attributes , modResource . опубликовано , modResource . pub_date , modResource . unpub_date , modResource . родитель , modResource . isfolder , modResource . интротекст , modResource . форматированный текст , modResource . шаблон , modResource . menuindex , modResource . с возможностью поиска , modResource . кэшируемый , modResource . создано , modResource . создано на , modResource . под редакцией , modResource . отредактировано на , modResource . удалено , modResource . удалено на , modResource . удалено , modResource . опубликовано на , modResource . опубликовано , modResource . menutitle , modResource . не , modResource . privateweb , modResource . privatemgr , modResource . content_dispo , modResource . скрытое меню , modResource . class_key , modResource . context_key , modResource . content_type , modResource . uri , modResource . uri_override , modResource . hide_children_in_tree , modResource . show_in_tree , modResource . свойства , IFNULL( TVartid . значение , '') AS tv.artid , IFNULL( TVartistsid . значение , '') AS 90 300 tv.ArtistsID , IFNULL( TVarttitle . value , '') AS tv.ArtTitle FROM modx_site_content AS modResource LEFT JOIN modx_site_tmplvar_contentvalues ​​ TVartid ON TVartid . contentid = modResource . id И TVartid . tmplvarid = 11 ЛЕВОЕ СОЕДИНЕНИЕ modx_site_tmplvar_contentvalues ​​ TVartistsid ON TVartistsid .

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

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