PageBlocks. Удобное управление контентом сайта.
Всем привет.
Документация
PageBlocks позволяет легко и быстро интегрировать верстку. Больше никаких дополнительных полей(tv). Добавляйте, удаляйте и перемещайте блоки в интерфейсе ресурса.

Разберем несколько блоков для примера:

Теперь давайте создадим такой блок в конструкторе блоков:


Здесь мы будем использовать дополнительную таблицу внутри блока:

В чанке выводим таблицу через параметр blocks(имя поля, которое мы задали в блоке):

Поэтому мы заполним блок только в одном месте — в базе готовых блоков.
1. Создаем структуру блока

2. Заполняем блок

3. Добавляем на страницы

Но, можно еще вывести этот блок вручную через идентификатор блока.
При обновлении базового блока, все соответствующие блоки будут обновлены автоматически, кроме тех блоков, у которых отмечена галочка «Уникальный блок».
Каждый блок можно сделать доступным только для конкретной страницы или шаблона.

1. Контексты. (например, Babel)
Используем тот же код, что и выше.
2. Без контекстов (например, localizator)
В системной настройке pageblocks_contexts добавляем необходимые языки, например English==web||Russian==ru. Где English — это название языка, web — имя контекста. В недалеком будущем будет автоматический перевод.

Выводим блоки:
Есть возможность экспортировать/импортировать блоки в формат csv. Очень удобно для копирования блоков с одной страницы в другую, а также для импорта большого кол-во однотипных блоков, но об этом узнаете чуть позже))

Продолжение следует…
Ссылка на компонент
P.S. Вы всегда бесплатно можете протестировать компонент на модхосте
Документация
PageBlocks позволяет легко и быстро интегрировать верстку. Больше никаких дополнительных полей(tv). Добавляйте, удаляйте и перемещайте блоки в интерфейсе ресурса.

Блоки контента
Разберем несколько блоков для примера:
1. Обычный блок
Блок имеет структуру: заголовок, описание, 2 кнопки и картинку.
Теперь давайте создадим такой блок в конструкторе блоков:

В чанке hero нам доступны след. переменные: title, desc, appstore, googleplay и img
2. Блок с повторяющими элементами.

Здесь мы будем использовать дополнительную таблицу внутри блока:

В чанке выводим таблицу через параметр blocks(имя поля, которое мы задали в блоке):
{foreach $blocks as $block}
<div class="card">
<div class="card-header">
<div class="icon {$block.icon}"></div>
<h2>{$block.title}</h2>
</div>
<div class="card-body">
{$block.desc}
</div>
</div>
{/foreach}3. Готовые блоки.
Есть блок FAQ, который нужно вывести и на других страницах. Но, заполнять такие блоки на каждой странице было бы тупо.
Поэтому мы заполним блок только в одном месте — в базе готовых блоков.
1. Создаем структуру блока

2. Заполняем блок

3. Добавляем на страницы

Но, можно еще вывести этот блок вручную через идентификатор блока.
{'!pdoResources' | snippet: [
'frontend_css' => '',
'class' => 'pageBlock',
'loadModels' => 'pageBlocks',
'sortby' => 'rank',
'sortdir' => 'asc',
'limit' => 1,
'tpl' => 'tpl.PageBlocks',
'where' => [
'id' => 4, // faq block id
'active' => 1
],
]} При обновлении базового блока, все соответствующие блоки будут обновлены автоматически, кроме тех блоков, у которых отмечена галочка «Уникальный блок».
Доступность
Каждый блок можно сделать доступным только для конкретной страницы или шаблона.

Вывод блоков на странице
{'!pdoResources' | snippet: [
'frontend_css' => '',
'class' => 'pageBlock',
'loadModels' => 'pageBlocks',
'sortby' => 'rank',
'sortdir' => 'asc',
'limit' => 0,
'tpl' => 'tpl.PageBlocks',
'where' => [
'resource_id' => $_modx->resource.id,
'active' => 1
],
]}Мультиязычность
1. Контексты. (например, Babel)
Используем тот же код, что и выше.
2. Без контекстов (например, localizator)
В системной настройке pageblocks_contexts добавляем необходимые языки, например English==web||Russian==ru. Где English — это название языка, web — имя контекста. В недалеком будущем будет автоматический перевод.

Выводим блоки:
{'!pdoResources' | snippet: [
'frontend_css' => '',
'class' => 'pageBlock',
'loadModels' => 'pageBlocks',
'sortby' => 'rank',
'sortdir' => 'asc',
'limit' => 0,
'tpl' => 'tpl.PageBlocks',
'where' => [
'resource_id' => $_modx->resource.id,
'context_key' => $_modx->config.localizator_key,
'active' => 1
],
]}Экспорт / Импорт
Есть возможность экспортировать/импортировать блоки в формат csv. Очень удобно для копирования блоков с одной страницы в другую, а также для импорта большого кол-во однотипных блоков, но об этом узнаете чуть позже))

Продолжение следует…
Ссылка на компонент
P.S. Вы всегда бесплатно можете протестировать компонент на модхосте
Комментарии: 49
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Обязательно к изучению
Надеюсь что он займет достоиное место в экосистеме Modstore.pro
Создал таблицу, создал поле. Захожу добавляю блок вроде все красиво и понятно, удобней чем через migx
На сайте же мне выводит следующее
Array ( [blocks] => Array ( [0] => Array ( [vopros] => Первый вопррос ) ) )
Чанк который указал создан.
Ковыряю как только могу ничего в голову не приходит.
А вы вызываете чанк напрямую, значит он принимает только один параметр $values — это массив, и в нем уже все необходимые данные.
'frontend_css' => '',
'class' => 'pageBlock',
'loadModels' => 'pageBlocks',
'sortby' => 'rank',
'sortdir' => 'asc',
'limit' => 1,
'tpl' => 'tpl.PageBlocks',
'where' => [
'id' => 1,
'active' => 1
],
]}
Вызвал так как в документации
Получаю
Array ( [blocks] => Array ( [0] => Array ( [vopros] => Первый вопррос ) [1] => Array ( [vopros] => Второй ) ) )
Как мне чанк вызвать?
Вам нужно его изменить:
На тестовом сайте поменял.
Спасибо сейчас вижу что заработало. Буду пробовать дальше.
На Модхосте компонент, к сожалению, больше не доступен, но доступен в главном репо. дополнений MODX.
Вот его сайт pageblocks.boshnik.com/
А вот репа бесплатной версии github.com/Boshnik/PageBlocksFree
Это какой-то known bug? Есть шанс что починишь или мне искать обходной путь?
В доке не нашел подробностей, как будто бы должно работать сразу из коробки.
MODX 2.8.6
pageblocks-1.0.0-pl
И вопрос, раз вышла 2-я мажорная версия, то реально ли бесшовно обновится с 1-ой или есть какие-то breaking changes?
Ошибка при заходе на страницу: assets/components/pageblocks/connector.php 500 (Internal Server Error) ext-base.js 21
Изначально вроде работало, сейчас не могу понять в чем причина.
И это еще как-то связанно с типом ресурса, если выбрать не Документ а статический ресурс, то ошибка пропадает.
Прошу прощения, не увидел комментария, проблема бала (возможно даже две) если блок добавлен на страницу, а потом его удалили из конфига. И вторая, если настройка была назван на русском языке (конкретно где, не помню, но я так случайно делал). Потом появлялись проблемы с созданием и отображением блоков.
Решается путем выставлении settimeout на меньшее значение
Вот тут 301 строка
MODX Revolution 2.8.8-pl
PHP 8.2
1.0.1-pl
Использую версию PageBlocks 1.0.2-pl (MODX 3.0.6-pl)
Обнаружил, что не работает перетаскивание (Drag-and-drop) записей в таблицах (сортировка). При перетаскивании строка выделяется, но после переноса и отпускания ничего никуда не перемещается (ну и menuindex у записей в БД не меняется, остается как был=0)
При этом перетаскивание блоков при редактировании ресурса работает исправно.
Проблема решается только переходом на платную версию?
Заранее спасибо за ответ.
Исправил. Обновляйтесь
[2025-08-31 16:42:09] (ERROR @ /home/d/dmitrtro/site.ru/public_html/core/xpdo/om/xpdoobject.class.php: 241) Error 42000 executing statement:
Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'asc' at line 1
)
SQLSELECT `blockField`.`id` AS `blockField_id`, `blockField`.`block_id` AS `blockField_block_id`, `blockField`.`table_id` AS `blockField_table_id`, `blockField`.`group_id` AS `blockField_group_id`, `blockField`.`field_table_id` AS `blockField_field_table_id`, `blockField`.`name` AS `blockField_name`, `blockField`.`width` AS `blockField_width`, `blockField`.`caption` AS `blockField_caption`, `blockField`.`help` AS `blockField_help`, `blockField`.`xtype` AS `blockField_xtype`, `blockField`.`values` AS `blockField_values`, `blockField`.`where` AS `blockField_where`, `blockField`.`number_allownegative` AS `blockField_number_allownegative`, `blockField`.`number_minvalue` AS `blockField_number_minvalue`, `blockField`.`number_maxvalue` AS `blockField_number_maxvalue`, `blockField`.`columns` AS `blockField_columns`, `blockField`.`default` AS `blockField_default`, `blockField`.`combo` AS `blockField_combo`, `blockField`.`source` AS `blockField_source`, `blockField`.`source_path` AS `blockField_source_path`, `blockField`.`required` AS `blockField_required`, `blockField`.`rank` AS `blockField_rank`, `blockField`.`active` AS `blockField_active` FROM `modx_pb_fields` AS `blockField` WHERE ( ( `blockField`.`active` = 1 AND `blockField`.`group_id` = 0 ) AND `blockField`.`block_id` = 1 ) ORDER BY rank asc
[2025-08-31 16:42:09] (ERROR @ /home/d/dmitrtro/site.ru/public_html/core/xpdo/om/xpdoobject.class.php: 241) Error 42000 executing statement:
Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'asc' at line 1
)
SQLSELECT `blockFieldGroup`.`id` AS `blockFieldGroup_id`, `blockFieldGroup`.`block_id` AS `blockFieldGroup_block_id`, `blockFieldGroup`.`table_id` AS `blockFieldGroup_table_id`, `blockFieldGroup`.`name` AS `blockFieldGroup_name`, `blockFieldGroup`.`rank` AS `blockFieldGroup_rank`, `blockFieldGroup`.`active` AS `blockFieldGroup_active` FROM `modx_pb_field_groups` AS `blockFieldGroup` WHERE ( `blockFieldGroup`.`active` = 1 AND `blockFieldGroup`.`block_id` = 1 ) ORDER BY rank asc
Версия 1 не поддерживается с 29.11.2024
Во всех файлах?
/core/components/pageblocks/processors/mgr/column/sort.class.php
/core/components/pageblocks/processors/mgr/grid/sort.class.php
/core/components/pageblocks/processors/mgr/group/sort.class.php
/core/components/pageblocks/processors/mgr/collection/sort.class.php
/core/components/pageblocks/processors/mgr/table/sort.class.php
/core/components/pageblocks/processors/mgr/video/gallery/sort.class.php
/core/components/pageblocks/processors/mgr/gallery/sort.class.php
/core/components/pageblocks/processors/mgr/field/sort.class.php
/core/components/pageblocks/processors/mgr/constructor/sort.class.php
В админке вместо изображения и пунтов отображается Array