pbBlocks
Выводит блоки конструктора, прикреплённые к ресурсу, — то самое тело страницы, которое собрали в конструкторе.
[[!pbBlocks]]Параметры
| Параметр | По умолчанию | Описание |
|---|---|---|
parent | текущий ресурс | Чьи блоки выводим — тем же именем владелец зовётся в pbList, pbResources и pbMenu. &resource — устаревший синоним, работает ещё одну мажорную версию и пишет в лог MODX. |
limit | Вывести только первые N блоков. | |
offset | 0 | Пропустить первые N блоков. |
tpl | Чанк, получающий каждый блок как item. Без него каждый блок рендерится своим чанком — тем, который задан в его конструкторе. | |
toPlaceholder | Вывод уходит в плейсхолдер MODX, сниппет возвращает пустоту. | |
showLog | Печатает, почему ничего не вывелось; видно только в менеджере. | |
tplWrapper | pageblocks.blocks.wrapper | Чанк вокруг всего вывода. Работает и с tpl, и без него. |
Плюс tplEmpty и outputSeparator — вот эти два только если задан tpl.
Обёртка — это дефолт, а не опция
tplWrapper — это контейнер .pb-page, и он единственное место, где объявлены токены компонента: --pb-content-max, --pb-section-gap и остальные из pb.blocks.css заданы на нём, а не на :root. Потеряли обёртку — каждый блок потерял размеры, по которым себя строит.
Поэтому она применяется на обоих путях вывода. Убрать её — когда страницу оборачивает сам шаблон сайта — можно явно переданным пустым значением: &tplWrapper=``. Пустое значение означает «обёртки нет», а не «возьми дефолт»: сниппет смотрит, передали ли параметр вообще, а не пуст ли он.
На пустом списке блоков обёртки не будет в любом случае — лишнего пустого <div> в разметке не появится.
Как выбирается вывод
Без tpl сниппет зовёт у каждого блока его собственный render(), а тот берёт чанк из полей chunk и chunk_path. Это обычный случай: конструктор уже знает, как выглядит каждый блок.
С tpl вы берёте это на себя — удобно, когда те же блоки в другом месте нужны с другой разметкой или когда каждый надо во что-то завернуть.
Только опубликованное и только на своём языке
Сниппет ходит через связь blocks() ресурса, поэтому отдаёт блоки опубликованные (published_at заполнен и уже наступил), не удалённые мягко и относящиеся к текущему языку. Неопубликованный блок не попадёт на фронт без всяких дополнительных условий с вашей стороны.
Примеры
Тело текущей страницы
[[!pbBlocks]]Блоки другой страницы
[[!pbBlocks? &parent=`15`]]Сначала три блока, потом остальные
[[!pbBlocks? &limit=`3`]]
...
[[!pbBlocks? &offset=`3` &limit=`100`]]Из Fenom
{foreach $modx->resource->blocks()->get() as $block}
{$block->render()}
{/foreach}Ничего не вывелось?
Сперва проверьте published_at у блоков, а уже потом маршруты и шаблоны — неопубликованный блок пропускается молча.