Skip to content
PageBuilder
PageBuilder
Визуальный конструктор секций для MODX 3: черновик и публикация без перезаписи content ресурса
  • MODX 3
  • PHP 8.2
  • Vue 3
  1. Компоненты
  2. PageBuilder
  3. Редактор и менеджер

Рабочий процесс ​

Редактор живёт на вкладке Секции ресурса. Страницу собирают из блоков. Автосохранение держит черновик. Сохранить ресурса MODX публикует секции на сайт.

Черновик и опубликованная версия ​

PageBuilder хранит две копии документа в таблице pb_pages:

СлойГде лежитКто видит
Черновикdraft_jsonРедактор, превью во вкладке
Опубликованоpublished_json, счётчик published_revisionСниппет [[!PageBuilder]] на сайте

Поле Содержимое ресурса (modResource.content) компонент не трогает. SEO-поля ресурса (pagetitle, description) работают как обычно.

Ресурс MODX тоже должен быть опубликован

Даже при опубликованных секциях страница не откроется, если сам ресурс в MODX снят с публикации.

Типичный цикл ​

  1. Откройте ресурс → вкладка Секции (нужны pagebuilder_view и право view на ресурс).
  2. Добавить секцию. В каталоге вкладка Блоки, в Pro ещё Примеры и Общие блоки. Выберите тип, откройте Свойства, заполните поля.
  3. Пока инспектор открыт у только что добавленной секции, автосохранение на паузе. Отмена откатывает черновик к состоянию до добавления. После сохранения секция остаётся в документе.
  4. Меняйте порядок перетаскиванием или Alt+↑ / Alt+↓ при выбранной секции в списке.
  5. Автосохранение периодически шлёт черновик на сервер (mgr/page/save). На сайт это не влияет.
  6. Preview открывает панель с iframe черновика, не публичный URL. Перед открытием превью сохраняет несохранённый черновик.
  7. Сохранить ресурс MODX: проверка полей → draft (если черновик изменён) → mgr/page/publish. Проверьте страницу с [[!PageBuilder]].
  8. Снять с публикации (если есть в интерфейсе) убирает секции с сайта через mgr/page/unpublish. Черновик в редакторе остаётся.

Отдельной кнопки «Опубликовать» и бейджа «Ещё не на сайте» на вкладке Секции нет. Публикация — Сохранить ресурса MODX.

На панели инструментов переключатель таблица / редакционный список. Значение по умолчанию задаёт pagebuilder_resource_view_mode (editorial или table). Выбор менеджера пишется в localStorage. В редакционном списке на строках есть тумблер включения секции.

В боковой панели блок Доставка и API показывает URL Public API и Agent API для текущего ресурса и номер revision.

Сохранение и 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. Подробнее: Вывод на сайте → Видимость.

Responsive в инспекторе ​

При pagebuilder_responsive_editor_enabled = 1 у подходящих полей появляется иконка планшета. Можно задать разные значения для desktop / tablet / mobile.

Свернуть обратно: Одно значение для всех экранов (берётся desktop). Кнопка недоступна, если у поля в схеме жёсткий responsive: true.

Пока настройка выключена, вкладок устройств нет. Уже сохранённые карты breakpoints на сайте работают, пока редактор не сохранит поле одним значением.

Пороги и режим вывода: Системные настройки → Responsive.

Публикация и снятие с публикации ​

Публикация (mgr/page/publish), обычно из Сохранить ресурса:

  • копирует текущий черновик в published_json;
  • увеличивает revision;
  • сбрасывает кеш отрисовки ресурса pagebuilder/{resourceId}.

Снять с публикации (mgr/page/unpublish) очищает опубликованный снимок. Черновик не меняется. На сайте сниппет перестанет выводить секции.

События: pbOnBeforePublish, pbOnAfterPublish, pbOnBeforeUnpublish, pbOnAfterUnpublish.

Порядок секций и дубликат ​

В списке секций:

  • перетаскивание меняет порядок в черновике;
  • Alt+↑ / Alt+↓ двигают выбранную секцию;
  • Дублировать создаёт копию с новым id в том же черновике.

После дубликата или перестановки дождитесь автосохранения или сохраните ресурс, чтобы зафиксировать и опубликовать состояние.

Корзина на странице (Free) ​

Удаление секции не стирает её сразу. Блок попадает в Корзину на этой же вкладке (document.trash[] внутри черновика).

ДействиеЧто происходит
В корзинуСекция уходит в trash, в settings сохраняется _trashIndex для восстановления на место
ВосстановитьСекция возвращается на прежний index или в конец списка
Удалить навсегдаЗапись исчезает из trash
Восстановить все / очиститьМассовое восстановление или окончательное удаление с подтверждением

События: pbOnBeforeTrash, pbOnAfterTrash.

Это корзина одной страницы. Она не показывает секции с других ресурсов.

Глобальная корзина (Pro) ​

При сохранении черновика 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 страницы показывает только опубликованные секции. Черновик смотрят так:

  • кнопка Preview на вкладке Секции (перед открытием сохраняет несохранённый черновик);
  • панель с iframe, ширина viewport из pagebuilder_responsive_breakpoints (по умолчанию 1280 / 768 / 390);
  • прямой URL {assets_url}components/pagebuilder/preview.php с подписанным токеном (pagebuilder_preview_secret).

CSS шаблона и дополнительные стили для iframe задают pagebuilder_preview_include_template_css и pagebuilder_preview_css_urls. Подробнее: Вывод на сайте → Превью.

Кеш HTML на сайте ​

После публикации или снятия с публикации сбрасывается кеш отрисовки pagebuilder/{resourceId}.

Сниппет с use_cache=1 (по умолчанию) кеширует итоговый HTML в MODX. Если правите Fenom-chunks или plugin на pbOnBeforeRenderSection, опубликуйте страницу заново (Сохранить ресурса) или временно вызовите сниппет с use_cache=0, затем очистите кеш сайта.

События отрисовки срабатывают только при промахе кеша. Для отладки plugin на отрисовке отключите кеш сниппета.

Демо-данные (Fake) ​

При pagebuilder_fake_enabled = 1 в инспекторе секции появляется кнопка Fake. Connector mgr/section/fake заполняет поля демо-данными. Один и тот же seed даёт одинаковый результат.

Перед публикацией на боевой сайт замените fake-значения на реальный контент.

Связанные страницы ​