pdoTools
Последнее обновление not available | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn moreПосле чистой установки MODX часто ставят набор extras для функциональности сайта.
Обычный набор знаком:
- getResources для списков документов
- getPage для пагинации списков
- Wayfinder для меню
- Breadcrumb(s) для хлебных крошек
- GoogleSitemap для sitemap
Всё это можно заменить одним пакетом: pdoTools.
Ниже краткий обзор возможностей.
9 сниппетов¶
Серьёзно. В pdoTools 9 сниппетов, которых хватает почти для любого обычного сайта. Большинство из них можно поставить вместо популярных аналогов.
pdoResources¶
pdoResources заменяет getResources.
Как и остальные сниппеты pdoTools, он не использует объекты xPDO для вывода ресурсов. Работает напрямую с таблицами БД.
Так быстрее. Не нужно переводить даты ресурсов в timestamps перед фильтром date.
TV подключаются только нужные, поэтому перечисляйте их в &includeTVs через запятую.
[[!pdoResources?
&parents=`0`
&includeTVs=`my_tv1,my_tv2`
&tvPrefix=`tv.`
&processTVs=`1`
&includeContent=`1`
&showLog=`1`
]]
Одно из важных свойств pdoTools: &showLog.
По нему видно, насколько быстр сниппет. Тормозит SQL или слишком сложный чанк?
&showLog помогает это увидеть.
Вторая важная возможность: SQL joins. Через pdoTools собирают сложные запросы и выбирают только нужное.
[[!pdoResources?
&parents=`0`
&class=`modResource`
&leftJoin=`{
"Parent": {
"class": "modResource",
"on": "modResource.parent = Parent.id"
},
"CreatedBy": {
"class": "modUserProfile",
"on": "modResource.createdby = CreatedBy.internalKey"
}
}`
&select=`{
"modResource": "modResource.id, modResource.pagetitle",
"Parent": "Parent.pagetitle as parent",
"CreatedBy": "CreatedBy.fullname as author"
}`
&showLog=`1`
]]
В примере выше не нужны отдельные сниппеты и output filters, чтобы получить родителя ресурса или имя автора. Насколько быстро? Смотрите лог.
Есть и другие фичи, но эти две главные.
pdoPage¶
pdoPage заменяет getPage. Отличия от getPage:
- Пустые страницы не показывает. Нет результатов или пользователь вручную открыл неверную страницу: редирект на первую.
- Есть
&maxLimit, по умолчанию 100. Пользователь не сможет замедлить сайт через&limit=100000в URL. Если у вас getPage, попробуйте так на своём сайте. - В header страницы ставит metatags previous/next для краулеров.
- Есть встроенная ajax-пагинация. Пример:
<div id="pdopage">
<div class="rows">
[[!pdoPage?
&parents=`0`
&ajaxMode=`default`
]]
</div>
[[!+page.nav]]
</div>
Разметку можно менять дополнительными параметрами сниппета.
pdoMenu¶
Этот сниппет может заменить Wayfinder. Работает похоже, но чуть быстрее.
Так как объекты xPDO обходятся, права пунктов меню проверяйте вручную специальным свойством:
[[!pdoMenu?
&parents=`0`
&checkPermissions=`list`
]]
По умолчанию проверки прав выключены. Это свойство, кстати, есть у всех сниппетов pdoTools.
pdoUsers¶
Сниппет выводит пользователей сайта. Фильтруйте по группам и ролям:
[[!pdoUsers?
&groups=`Authors`
&sortdir=`asc`
]]
Можно совместить с pdoPage для списка с пагинацией:
[[!pdoPage?
&element=`pdoUsers`
&groups=`Authors`
&roles=`Member`
&sortby=`id`
&sortdir=`asc`
]]
[[!+page.nav]]
Плейсхолдеры: все поля объектов modUser и modUserProfile.
Чтобы увидеть их, задайте пустой &tpl (или не задавайте, если у сниппета нет tpl по умолчанию).
Пустой &tpl это ещё одна общая фича всех сниппетов pdoTools.
pdoSitemap¶
pdoSitemap строит быстрый sitemap. Ресурс не обязан быть XML, если включено &forceXML (по умолчанию).
Данные кэшируются. Ключ кэша зависит от параметров сниппета, но можно задать свой.
Чтобы оценить скорость, отключите &forceXML и включите &showLog.
На моём сайте первый прогон около 30 секунд, второй около 0.03:
[[!pdoSitemap?
&forceXML=`0`
&showLog=`1`
]]
В sitemap 6873 ресурса.
pdoNeighbors¶
Сниппет для ссылок на предыдущую, следующую и родительскую страницы текущего документа.
[[!pdoNeighbors?
&sortby=`menuindex`
&sortdirc=`desc`
]]
Просто соседи.
pdoCrumbs¶
Мой вариант простого сниппета хлебных крошек. Ничего необычного, кроме ядра pdoTools с быстрыми чанками и выборкой данных.
[[!pdoCrumbs]]
pdoTitle¶
Сниппет собирает тег title страниц. Вызывает pdoCrumbs и показывает путь к текущему документу в title.
<title>[[!pdoTitle]] / [[++site_name]]</title>
По умолчанию поддерживает pdoPage, поэтому в title видно номер страницы.
<title>Questions / page 5 from 593 / Sections / mysite.com</title>
Краулеры это любят.
pdoField¶
И наконец pdoField: любое поле любого ресурса. Заменяет и UltimateParent, и getResourceField.
Пример: нужен longtitle ресурса с id = 15
[[pdoField?
&id=`15`
&field=`longtitle`
]]
Или pagetitle «дедушки» текущего документа:
[[pdoField?
&id=`[[*id]]`
&field=`pagetitle`
&top=`2`
]]
Заключение¶
Все сниппеты pdoTools используют одно ядро, и большинство параметров работает у всех.
Через &showLog смотрите, как работают сниппеты. Пустые чанки показывают доступные плейсхолдеры. Таблицы можно join-ить на лету.
pdoTools это библиотека, а не просто набор сниппетов. Многие extras MODX используют pdoTools для своих сниппетов: miniShop2, Tickets, BannerY, AjaxForm и другие.
Не забывайте: параметры описаны внутри сниппетов. Откройте сниппет в Менеджере и смотрите вкладку Properties.
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn more
















