Одна из частых задач при работе с PageBlocks — вывести блоки с другой страницы. Например, создать универсальный блок отзывов на главной, который менеджер редактирует на отдельной служебной странице /manager/reviews/, или собрать карусель партнёров из блоков другого ресурса.
В бесплатной версии PageBlocks нет готового сниппета для этого, но задача решается через xPDO-запрос к таблице pbBlockValue. В этой статье разберём реальные кейсы применения и интеграцию с готовым сниппетом getPageBlockContent.
- Зачем выводить блоки с других страниц?
- Как работает PageBlocks Free (техническая часть)
- Структура хранения данных
- Проблема стандартного вывода
- Решение: сниппет getPageBlockContent
- Создание блока PageBlocks для вывода контента
- Шаг 1: Создание блока
- Шаг 2: Чанк блока
- Шаг 3: Использование
- Как узнать ID страницы и блоков?
- Сравнение с PRO версией
- Заключение
Зачем выводить блоки с других страниц?
Реальные кейсы:
- Централизованное управление — менеджер редактирует «Отзывы» на странице
/manager/reviews/, а вывод идёт на главную и/services/ - Повторное использование — форма «Получить консультацию» создана один раз, но вставляется на 5 лендингов
- Синхронизация — изменения в одном месте автоматически отражаются везде (альтернатива синхронизированным блокам из PRO версии)
- Мультиязычность — блоки EN страницы отображаются на
/en/контексте
Статистика: 40% проектов на PageBlocks используют переиспользуемые блоки.
Как работает PageBlocks Free (техническая часть)
Структура хранения данных
PageBlocks сохраняет контент в таблице modx_pb_block_value (префикс зависит от установки):
| Поле | Описание | Пример |
|---|---|---|
id |
ID блока | 42 |
model_id |
ID страницы (ресурса) | 10 |
chunk |
Чанк для рендера | pb.hero_section |
values |
JSON с данными полей | {"title":"Привет","text":"..."} |
published |
Опубликован? | 1 |
deleted |
Удалён? | 0 |
menuindex |
Порядок отображения | 0 |
Проблема стандартного вывода
Обычно блоки выводятся только с текущей страницы:
{* Работает только для своей страницы *}
{$_modx->runSnippet('!pdoResources', [
'class' => 'pbBlockValue',
'where' => ['model_id' => $_modx->resource.id]
])}
Проблема: нельзя вывести блоки с другого ресурса, потому что model_id жёстко привязан к текущей странице.
Решение: сниппет getPageBlockContent
Используйте готовый сниппет getPageBlockContent для вывода блоков с любого ресурса. Подробности установки, параметры и примеры — в описании сниппета. Альтернативная ссылка на github.
Создание блока PageBlocks для вывода контента
Второй способ — создать универсальный блок типа «Контент с другой страницы» прямо в админке PageBlocks.
Шаг 1: Создание блока
Элементы → PageBlocks → Создать блок
Название: Контент с другой страницы
Чанк: pb.remote_content
Поля блока:
| Название | Тип | Ключ | Описание |
|---|---|---|---|
| ID страницы-источника | Number | source_resource_id |
Обязательное |
| ID блоков (через запятую) | Text | block_ids |
Обязательное |
| Чанк для рендера (опционально) | Text | custom_tpl |
— |
Шаг 2: Чанк блока
Файл: assets/elements/chunks/pageblocks/pb.remote_content.tpl
{* Блок PageBlocks: вывод контента с другой страницы *}
{if $source_resource_id && $block_ids}
{set $blocks_html = '!getPageBlockContent' | snippet : [
'resourceId' => $source_resource_id,
'blockIds' => $block_ids,
'tpl' => $custom_tpl ?: ''
]}
{if $blocks_html}
<div class="remote-content-wrapper" data-source="{$source_resource_id}">
{$blocks_html}
</div>
{else}
<!-- Блоки не найдены: resourceId={$source_resource_id}, blockIds={$block_ids} -->
{/if}
{else}
<!-- Ошибка: не указаны source_resource_id или block_ids -->
{/if}
Шаг 3: Использование
В админке PageBlocks:
- Добавить блок «Контент с другой страницы»
- Заполнить:
- ID страницы:
10 - ID блоков:
4,7,21
- ID страницы:
- Сохранить
Результат: на странице автоматически выведутся блоки 4, 7, 21 со страницы 10.
Как узнать ID страницы и блоков?
ID страниц у нас показаны в дереве ресурсов в фигурных скобках, в адресной строке браузера и хлебных крошках. А чтобы узнать ID блоков, просто зайдите на нужную вам страницу во вкладку PageBloks.

Сравнение с PRO версией
| Функция | Free (наш сниппет) | PRO версия |
|---|---|---|
| Вывод блоков с других страниц | ✅ Вручную | ✅ Встроенный сниппет |
| Синхронизация блоков | ❌ | ✅ |
| UI выбора блоков | ❌ Только ID | ✅ Графический |
| Коллекции | ❌ | ✅ |
| Цена | Бесплатно | $49 |
Вывод: для простых задач Free + наш сниппет достаточно.
Заключение
Сниппет getPageBlockContent решает главную проблему бесплатной версии PageBlocks — позволяет переиспользовать блоки между страницами. Теперь вы можете:
- Создать централизованное хранилище контента;
- Редактировать в одном месте — обновляется везде;
- Строить сложные конструкции (карусели, табы);
- Экономить время менеджеров.
Следующий урок: Интеграция форм с MODX: FetchIt + FormIt (на Fenom).







