Modx pdoresources: Документация по MODX pdoResources и примеры вывода ресурсов.

Замена 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», а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешным.

Дополнения MODX

В этом разделе я собрал дополнения (модули MODX), которые я устанавливаю сразу после разворачивания дистрибутива при разработке сайтов. Среди этих дополнений есть как обычные сниппеты MODX, выполняющие те или иные функции, так и полноценныые модули со своей страничкой в разделе «Компоненты» в админке

Рядом с каждым дополнением есть ссылка на его страничку в официальном репозитории и на последнюю сохраненную версию на моем сайте. По возможности, скачивайте версию из официального репозитория (если он доступен) — ведь я не могу поддерживать версии всех дополнений в актуальном состоянии.

Надеюсь, я не нарушил никаких лицензий.

pdoTools

Репозиторий С сайта

Компонент-замена нескольких пакетов для выборки ресурсов или других объектов. От своих аналогов отличается скоростью. В состав входят следующие сниппеты:

  • pdoResources — Выводит списки ресурсов. Полноценная замена getResources
  • pdoSitemap — Выводит xml-карту сайта. Аналог GoogleSiteMap
  • pdoCrumbs — Добавляет на сайт навигацию в виде хлебных крошек. Заменяет Breadcrumb
  • pdoField — Предоставляет доступ к полям ресурсов. Заменяет одновременно getResourceField и UltimateParent
  • pdoUsers — Выводит список пользователей сайта. Поддерживает фильтрацию по группам пользователей
  • pdoNeighbors — Показывает ссылки на следущий и предыдущий ресурсы
  • pdoPage — Реализует постраничность, так же, как и getPage
  • pdoMenu — Выводит меню на сайте в виде списка ссылок. Аналог Wayfinder

Ace

Репозиторий С сайта

Подсветка синтаксиса в админке для чанков, сниппетов и пр. Дополнение нереально крутое — есть даже автодополнение. Если вы пользуетесь CodeMirror или прочими пакетами для подсветки — просто попробуйте 🙂

autoRedirector

(модуль MODX)

Репозиторий С сайта

Компонент отслеживает изменения адресов страниц на сайте и, если вы меняете адрес какой-то страницы, автоматически проставляет редирект. Можно использовать вместо Redirector, так как позволяет в админке вручную добавить любое правило редиректа.

Batcher

(модуль MODX)

Репозиторий С сайта

Дополнение позволяет массово переключить у ресурсов шаблон, состояния Показывать/Не показывать, Опубликован/Не опубликован и пр. Редко когда пригождается, но пару раз он меня очень выручал.

BreadCrumb

(сниппет)

Репозиторий С сайта

На мой взгляд, самое простое дополнение, добавляющее на сайт навигацию в форме хлебных крошек.

Console

(модуль MODX)

Репозиторий С сайта

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

DirectResize2

Репозиторий С сайта

Уменьшает вставленные в контент изображения до нужного размера, подключая одну из трех JS-библиотек, которые увеличивают картинки по клику. В итоге сайт загружается быстрее, так как картинки все «ужаты».

FastUploadTV

Репозиторий С сайта

Добавляет новый тип ТВ-параметров для упрощенной загрузки картинок контент-менеджером. Этот ТВ представляет из себя кнопку, при нажатии на которую открывается окно выбора файла. Выбранный файл загружается на сайт в предварительно указанную папку и прикрепляется к ресурсу.

FormIt

(сниппет)

Репозиторий С сайта

Обрабатывает любые формы. Позволяет сделать валидацию полей форм, после чего передает данные в указанный сниппет для дальнейшей обработки. Может отправлять почту. Часто используется для создания контактных форм на сайте, но этим его возможности далеко не органичиваются.

Советую уделить этому сниппету много внимания и изучить все его возможности.

AjaxForm

(сниппет)

Репозиторий С сайта

Добавляет возможность реализовать отправку любой формы через AJAX. Хорошо взаимодействует с FormIt и по умолчанию настроен на автоматическую работу с такими формами.

MinifyX

(сниппет)

Репозиторий С сайта

Объединяет и минифицирует стили и скрипты на сайте. Если вызывать некешированным, то отслеживает изменения файлов и пересобирает результирующий файл.

Gallery

(модуль MODX)

Репозиторий С сайта

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

impArt

(модуль MODX)

Репозиторий С сайта

Предназначен для массового добавления статей на сайт.

Все статьи загружаете в одно поле, разделив их символом # и импортируете как дочерние ресурсы к нужному документу.

Login

(сниппет)

Репозиторий С сайта

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

MIGX

(модуль MODX)

Репозиторий С сайта

Даёт возможность создавать в админке табличные ТВ-параметры с удобным интерфейсом добавления и редактирования строк.

modLastModified

Репозиторий С сайта

Возвращает пользователям (и поисковикам) заголовки Last-Modified и Not modified. Благодаря этому поисковики смогут чаще приходить на ваш сайт, чтобы проверить изменения — ведь нагрузка на их серверы будет меньше благодаря этим заголовкам.

phpThumbOn

(сниппет)

Репозиторий С сайта

Позволяет ресайзить картинки на сервере.

Создает превьюшки, обрезает картинки, накладывает водяные знаки и пр.

simpleUpdater

Репозиторий С сайта

Добавляет в раздел «Приложения» пункт «Обновить MODX», в котором вы можете провести апгрейд системы всего одной кнопкой.

CKEditor

Репозиторий С сайта

Визуальный редактор для ресурсов в админке MODX. Аккуратная и симпатичная панель инструментов, чистый код.

Collections

Репозиторий С сайта

Создаёт отдельный тип ресурса — коллекцию. Дочерние ресурсы коллекции не показываются в дереве, а отображаются на странице в виде удобной таблички. Идеально для разделов новостей или блогов

Translit

Репозиторий С сайта

Транслитерирует названия ресурсов, прежде чем установить в качестве псевдонима. Здесь локальная версия отличается от версии в репозитории несколько другой таблицей транслитерации. Например, в официальной версии буква «Ц» будет преобразована в «cz», а в локальной версии — в «c».

VersionX

(модуль MODX)

Репозиторий С сайта

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

xPoller

(модуль MODX)

Репозиторий С сайта

Компонент для организации AJAX-опросов для вашего сайта

SiteHeart

Репозиторий С сайта

Добавляет на сайт чат онлайн-поддержки от SiteHeart

Подборка полезных дополнений из репозитория

  • Подборка дополнений, которые могут однажды пригодиться. Часть 1
  • Подборка дополнений, которые могут однажды пригодиться. Часть 2
  • Подборка дополнений, которые могут однажды пригодиться. Часть 3

Немного подробностей по другим дополнениям

  • [scannerMODX] — проверьте целостность ядра MODX
  • simpleUpdater 2.1.1 — Возвращён пункт в меню «Приложения»
  • siteExtra 1.4.0 — поддержка синтаксиса Fenom
  • simpleUpdater 2.1.0
  • Очень простое добавление кастомных объектов в MODX
  • Как обновить MODX одной кнопкой
  • LangCorrect-0. 0.1 — Изменяем неверную раскладку запросов
  • SiteHeart — онлайн чат для сайта
  • xPoller — опросы для MODX
  • Отправляем заголовки Last-Modified и Not Modified
  • Новая версия Sendex
  • impArt — массовая заливка статей на сайт
  • autoRedirector — Автоматический редирект при изменении адреса страницы
  • Units — правильно указываем окончания для количественных обозначений
  • Новый раздел на сайте — Шаблоны для MODX Revolution
  • Модификация getPage для приведения пагинации к общепризнанным стандартам
  • editLinksNet — мое первое дополнение в официальном репозитории MODX
  • Шаблон Acallia для MODX
  • Плагин для переключения контекстов при отсутствии нужного URL в текущем контексте
  • Галерея в стиле Вконтакте или Яндекс.Картинок
  • Плагин для редиректа если страница перенесена или изменен URL страницы
  • Небольшой плагин для редиректа если страница перенесена
  • Автоматизация перелинковки сайта в MODX REVO

Авторизация

через сервис Loginza:


Шаблоны MODX

1 2 Дальше »

Объектная


модель
MODX

getResources и pdoResources обрабатывают &where очень по-разному — Общие

rdegler

1

У меня возникли проблемы с тем, что pdoResources не извлекает правильные ресурсы при использовании фильтрации &where.

Когда я добавляю &where, pdoResouces не ограничивает запрос выбранными &parents, а вместо этого запрашивает весь контекст:

Следующее работает и ограничивает себя дочерними ресурсами 617

 [[!pdoResources?
&parents=`617`
&limit=`0`
&includeTVs=`отчет о собрании`
&tvPrefix=``
&tpl=`таблица-отчетов-по-создателю-tpl`
&showHidden=`1`
]]
 

Однако это включает все результаты, ДАЖЕ ресурсы, которые не являются дочерними для ресурса 617, но применяют ограничение &where для возврата только двух шаблонов.

 [[!pdoResources?
&parents=`617`
&limit=`0`
&includeTVs=`отчет о собрании`
&tvPrefix=``
&tpl=`таблица-отчетов-по-создателю-tpl`
&showHidden=`0`
&where=`{"шаблон:=":9, "ИЛИ:шаблон:=":10}`
]]
 

getResources работает правильно:

 [[!getResources?
&parents=`617`
&limit=`0`
&includeTVs=`1`
&tvPrefix=``
&tpl=`таблица-отчетов-по-создателю-tpl`
&showHidden=`0`
&where=`{"template:=":9, "ИЛИ:template:=":10}`
]]
 

Количество ресурсов значительно возрастет, и я думаю, что pdoResources будет намного быстрее при запросе тысяч записей.

Система : Modx 2.8.4 на modxcloud

Любой совет будет очень полезен.

Спасибо
Рой

полутренированный Гарри

2

Попробуйте использовать массив в свойстве , где :

 &where=`[{"template:=":9, "OR:template:=":10}]`
 

Добавьте свойство &showLog=`1` и проверьте SQL-запрос, чтобы убедиться, что скобки в условиях where теперь верны.

редеглер

4

Я использовал оператор where, как указано в этом потоке, и как массив IN. Оба успешно ограничивают вывод ресурсами с указанными идентификаторами шаблонов.

Проблема возникает из-за того, что pdoResources игнорирует &parents= 617 и вместо этого возвращает ресурсы с шаблоном, ВКЛЮЧАЯ ресурсы, которые не являются дочерними элементами ресурса с идентификатором 617. Похоже, что &where заставляет pdoResources на игнорировать идентификаторы в параметре &parent.

Корректно работает при использовании getResources. Является ли использование getResources намного медленнее, чем pdoResources, при возврате тысяч ресурсов?

Я был убежден, что pdoResources работает значительно быстрее.

Может ли это быть ошибкой с pdoResources? Должен ли я сообщить о проблеме?

Рой

полутренированный Гарри

5

Если свойство where равно &where=`{"template:=":9, "OR:template:=":10}`
, тогда SQL-запрос будет

 SELECT *
ИЗ `modx_site_content` КАК `modResource`
ГДЕ (
`modResource`. `шаблон` = 9
ИЛИ `modResource`.`шаблон` = 10
И `modResource`.`parent` В (1,2,3,4,5)
И `modResource`.`опубликовано` = 1
И `modResource`.`hidemenu` = 0
И `modResource`.`deleted` = 0
)
 

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

То же, что и

 ГДЕ (
(`modResource`.`template` = 9)
ИЛИ ( `modResource`.`template` = 10 И `modResource`.`parent` В (1,2,3,4,5) И `modResource`.`published` = 1 И `modResource`.`hidemenu` = 0 И `modResource`.`deleted` = 0 )
)
 

Однако со свойством where &where=`[{"template:=":9, "OR:template:=":10}]` , теперь вокруг условия ИЛИ заключены скобки, и запрос должен быть правильным.

 ВЫБЕРИТЕ *
ИЗ `modx_site_content` КАК `modResource`
ГДЕ (
(`modResource`.`template` = 9 ИЛИ `modResource`.`template` = 10)
И `modResource`. `parent` В (1,2,3,4,5)
И `modResource`.`опубликовано` = 1
И `modResource`.`hidemenu` = 0
И `modResource`.`deleted` = 0
)
 

Используя &where=`[{"template:IN":[9,10]}]` , запрос также должен быть правильным.

 ВЫБЕРИТЕ *
ИЗ `modx_site_content` КАК `modResource`
ГДЕ (
`modResource`.`template` IN (9,10)
И `modResource`.`parent` В (1,2,3,4,5)
И `modResource`.`опубликовано` = 1
И `modResource`.`hidemenu` = 0
И `modResource`.`deleted` = 0
)
 

редеглер

6

Спасибо, Ваше объяснение действительно прояснило проблему.

Я выбрал подход IN Array. Поскольку мы, вероятно, разработаем третий шаблон для ресурсов, хранящихся в архивах. После реализации будет намного проще добавлять вызовы pdoResource.

Я думал, что такие параметры, как &parents и &resources, будут иметь приоритет над другими параметрами, такими как &where и &tvfilters. В результате (&parents AND &resources) затем применяются (другие ограничения фильтрации).

Я воспользуюсь &showlog= 1 и освежу свои знания SQL-запросов, когда столкнусь с неожиданными результатами.

Кажется, логические операторы, такие как AND, OR и NOT, в последнее время были в центре моего внимания в MODX. Мы работаем над тем, чтобы добавить их в возможности поиска по сайтам MODX.

Мы очень признательны за вашу помощь. Большое спасибо

Рой

система Закрыто

7

Эта тема была автоматически закрыта через 2 дня после окончания обсуждения и отмеченного решения. Новые ответы больше не допускаются. Вы можете открыть новую тему, щелкнув значок ссылки под исходным сообщением или решением и выбрав «+ Новая тема».

Pdoresources: показывать ресурсы в указанном порядке (отсортировано вручную)

frischnetz

1

Привет!

Как указать точный порядок, в котором pdoresources перечисляет результаты?

Я хочу отобразить список с &resources=`9,3,6` и получить ресурсы 9,3 и 6 в указанном порядке. Возможный?

Люси

2

Это может сработать?

 &sortby=`{id:9,3,6}`
 

Если нет, вы можете сортировать на любом телевизоре, например, можно установить индекс меню для этих ресурсов на 1, 2, 3 соответственно, а затем использовать:

 &sortby=`{menuindex:ASC}`
 

Фришнец

3

sortby=`{id:9,3,6}`

Нет, это выдает ошибку:

Неустранимая ошибка : Uncaught TypeError: Аргумент 1, переданный в pdoFetch::replaceTVCondition(), должен иметь тип array, значение null задано

(Сортировка с помощью menuindex здесь невозможна)

Бруно17

4

возможно

 &sortby=`FIELD(modResource.id, 4,7,2,5,1)` &sortdir=`ASC`
 

Люси

5

Может нужны кронштейны?

 sortby=`{id:[9,3,6]}`
 

Фришнец

Оставить комментарий

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

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