Введение
При установке 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:
{'!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:
<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:.