
- MODX 3
- PHP 8.2
- Vue 3


Редактор живёт на вкладке Секции ресурса. Страницу собирают из блоков. Автосохранение держит черновик. Сохранить ресурса MODX публикует секции на сайт.
PageBuilder хранит две копии документа в таблице pb_pages:
| Слой | Где лежит | Кто видит |
|---|---|---|
| Черновик | draft_json | Редактор, превью во вкладке |
| Опубликовано | published_json, счётчик published_revision | Сниппет [[!PageBuilder]] на сайте |
Поле Содержимое ресурса (modResource.content) компонент не трогает. SEO-поля ресурса (pagetitle, description) работают как обычно.
Ресурс MODX тоже должен быть опубликован
Даже при опубликованных секциях страница не откроется, если сам ресурс в MODX снят с публикации.
pagebuilder_view и право view на ресурс).mgr/page/save). На сайт это не влияет.mgr/page/publish. Проверьте страницу с [[!PageBuilder]].mgr/page/unpublish. Черновик в редакторе остаётся.Отдельной кнопки «Опубликовать» и бейджа «Ещё не на сайте» на вкладке Секции нет. Публикация — Сохранить ресурса MODX.
На панели инструментов переключатель таблица / редакционный список. Значение по умолчанию задаёт pagebuilder_resource_view_mode (editorial или table). Выбор менеджера пишется в localStorage. В редакционном списке на строках есть тумблер включения секции.
В боковой панели блок Доставка и API показывает URL Public API и Agent API для текущего ресурса и номер revision.
Клиент отправляет connector mgr/page/save вместе с номером revision черновика. Сервер сравнивает revision с базой.
Если два редактора или две вкладки сохранили один ресурс сразу, приходит revision_conflict. Редактор перезагружает документ с сервера. Обновите вкладку и сохраните снова. Не подставляйте revision вручную.
Перед публикацией (Сохранить ресурса) клиент проверяет обязательные поля (required: true в JSON типа). При ошибке откроется инспектор первой проблемной секции.
События plugin: pbOnBeforeSave, pbOnAfterSave (режим черновика). В pbOnBeforeSave расширения могут заменить документ через PageDocumentBag. В changes передаётся DocumentChangeSet. Там id секций: добавленные, удалённые, отправленные в корзину, восстановленные, включённые и выключенные.
Правила показа секции на сайте живут в section.settings: контексты, UTM, Pro conditions, копия для контекста. В инспекторе их открывает кнопка Видимость, если pagebuilder_inspector_visibility_enabled = 1. По умолчанию настройка выключена: редактор видит только поля контента.
Без кнопки правила в JSON всё равно работают на фронте, если их задали раньше или через API. Подробнее: Вывод на сайте → Видимость.
При pagebuilder_responsive_editor_enabled = 1 у подходящих полей появляется иконка планшета. Можно задать разные значения для desktop / tablet / mobile.
Свернуть обратно: Одно значение для всех экранов (берётся desktop). Кнопка недоступна, если у поля в схеме жёсткий responsive: true.
Пока настройка выключена, вкладок устройств нет. Уже сохранённые карты breakpoints на сайте работают, пока редактор не сохранит поле одним значением.
Пороги и режим вывода: Системные настройки → Responsive.
Публикация (mgr/page/publish), обычно из Сохранить ресурса:
published_json;pagebuilder/{resourceId}.Снять с публикации (mgr/page/unpublish) очищает опубликованный снимок. Черновик не меняется. На сайте сниппет перестанет выводить секции.
События: pbOnBeforePublish, pbOnAfterPublish, pbOnBeforeUnpublish, pbOnAfterUnpublish.
В списке секций:
id в том же черновике.После дубликата или перестановки дождитесь автосохранения или сохраните ресурс, чтобы зафиксировать и опубликовать состояние.
Удаление секции не стирает её сразу. Блок попадает в Корзину на этой же вкладке (document.trash[] внутри черновика).
| Действие | Что происходит |
|---|---|
| В корзину | Секция уходит в trash, в settings сохраняется _trashIndex для восстановления на место |
| Восстановить | Секция возвращается на прежний index или в конец списка |
| Удалить навсегда | Запись исчезает из trash |
| Восстановить все / очистить | Массовое восстановление или окончательное удаление с подтверждением |
События: pbOnBeforeTrash, pbOnAfterTrash.
Это корзина одной страницы. Она не показывает секции с других ресурсов.
При сохранении черновика plugin на pbOnAfterSave синхронизирует таблицу pb_basket_items. Туда попадают секции и строки таблиц, удалённые на разных ресурсах.
| Где | Зачем |
|---|---|
| Редактор ресурса → Корзина | Восстановление в черновике этой страницы (Free) |
| Панель управления → Корзина | Список между ресурсами, восстановление в исходный ресурс, окончательное удаление (Pro) |
Восстановление из панели управления вставляет секцию на позицию _trashIndex, как и локальная корзина.
Копировать секции вызывает connector mgr/copy/sections. Укажите ID ресурса-источника. Нужен view на источник, save на цель и право pagebuilder_save.
События: pbOnBeforeCopySections, pbOnAfterCopySections.
Копируется весь черновик источника. Он дописывается в конец черновика текущей страницы. Источник не меняется. На сайте изменения появятся после Сохранить на целевой странице.
В Pro дополнительно: Подтянуть с другой страницы (mgr/library/pull) в режиме Связать или Копировать. См. PageBuilder Pro.
Undo и redo работают в памяти редактора до успешного сохранения черновика на сервер. После mgr/page/save история локальных действий обнуляется.
Быстрые правки одного поля сливаются в одну запись undo: откат вернёт последнее значение, а не каждый символ.
Публичный URL страницы показывает только опубликованные секции. Черновик смотрят так:
pagebuilder_responsive_breakpoints (по умолчанию 1280 / 768 / 390);{assets_url}components/pagebuilder/preview.php с подписанным токеном (pagebuilder_preview_secret).CSS шаблона и дополнительные стили для iframe задают pagebuilder_preview_include_template_css и pagebuilder_preview_css_urls. Подробнее: Вывод на сайте → Превью.
После публикации или снятия с публикации сбрасывается кеш отрисовки pagebuilder/{resourceId}.
Сниппет с use_cache=1 (по умолчанию) кеширует итоговый HTML в MODX. Если правите Fenom-chunks или plugin на pbOnBeforeRenderSection, опубликуйте страницу заново (Сохранить ресурса) или временно вызовите сниппет с use_cache=0, затем очистите кеш сайта.
События отрисовки срабатывают только при промахе кеша. Для отладки plugin на отрисовке отключите кеш сниппета.
При pagebuilder_fake_enabled = 1 в инспекторе секции появляется кнопка Fake. Connector mgr/section/fake заполняет поля демо-данными. Один и тот же seed даёт одинаковый результат.
Перед публикацией на боевой сайт замените fake-значения на реальный контент.