Skip to content

Введение

При установке PageBlocks регистрирует семь сниппетов MODX. Они нужны, чтобы до компонента можно было дотянуться из обычного шаблона MODX: вставил вызов — получил вывод. Без контроллера, без маршрута и без перехода на наш шаблонизатор.

СниппетЧто делает
pbListУниверсальный листер с пагинацией по любой модели
pbBlocksВыводит блоки конструктора, прикреплённые к ресурсу
pbResourcesПлоский список ресурсов MODX
pbUsersПлоский список пользователей
pbMenuДерево ресурсов для навигации
pbFiltersГотовая форма фильтров для таблицы конструктора
pbJsonВыводит JSON через инлайн-шаблон

Сниппеты устанавливаются, а не заливаются

Сниппет — это строка в базе MODX, её создаёт установщик пакета. Копирование файлов на сервер её не создаёт: если [[!pbList]] выводится буквальным текстом, значит на этом сайте пакет не устанавливали.

Как вызывать

Работают оба написания. В шаблоне MODX:

[[!pbList? &model=`PbResource` &parent=`[[*id]]` &tpl=`chunk:myItem` &limit=`10`]]

В шаблоне Fenom:

php
{'!pbList' | snippet: ['model' => 'PbResource', 'tpl' => 'chunk:myItem', 'limit' => 10]}

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

Массивы в параметрах — это JSON

Сниппет MODX получает все параметры строками, поэтому всё, что по смыслу массив, пишется JSON-ом и разбирается самим сниппетом:

[[!pbList?
    &model=`PbResource`
    &tpl=`chunk:myItem`
    &where=`{"template":4}`
    &orderBy=`{"publishedon":"desc"}`
]]

Если JSON невалидный, значение уходит как есть — поэтому обычный список id вида 12,7,3 остаётся списком id.

Общие параметры вывода

У pbResources, pbUsers, pbMenu и pbBlocks один контракт вывода — тот же, что знаком по pdoTools:

ПараметрПо умолчаниюОписание
tplЧанк одной строки. Без него сниппет вернёт саму коллекцию — это имеет смысл только из Fenom.
tplWrapperЧанк-обёртка всего вывода. Получает output и total.
tplEmptyЧанк, который выводится вместо результата, когда ничего не нашлось.
outputSeparator\nЧем склеивать строки.

Внутри tpl строка доступна как item, а её номер (с единицы) — как idx:

php
<div class="card">
    <span class="num">{$idx}</span>
    <a href="{$item->uri}">{$item->pagetitle}</a>
</div>

Какой чанк имеется в виду в tpl

Голое имя — это файловый чанк из core/App/elements/chunks/. Префикс chunk: означает обычный чанк MODX:

&tpl=`myItem`         → core/App/elements/chunks/myItem.tpl
&tpl=`chunk:myItem`   → чанк MODX с именем myItem

Если вы зовёте сниппет из шаблона MODX, вам почти наверняка нужен chunk:.

© PageBlocks 2019-present