Рабочий процесс
Редактор живёт на вкладке Секции ресурса. Вы собираете страницу из блоков, правите черновик сколько нужно и отдельно решаете, когда показать результат на сайте.
Черновик и опубликованная версия
PageBuilder хранит две копии документа в таблице pb_pages:
| Слой | Где лежит | Кто видит |
|---|---|---|
| Черновик | draft_json | Редактор, превью во вкладке |
| Опубликовано | published_json, счётчик published_revision | Сниппет [[!PageBuilder]] на сайте |
Поле Содержимое ресурса (modResource.content) компонент не трогает. SEO-поля ресурса (pagetitle, description) работают как обычно.
На сайте всегда только опубликованный snapshot. Черновик можно ломать и откатывать, пока не нажмёте Опубликовать.
Ресурс MODX тоже должен быть опубликован
Даже при опубликованных секциях страница не откроется, если сам ресурс в MODX снят с публикации.
Типичный цикл
- Откройте ресурс → вкладка Секции (нужны
pagebuilder_viewи правоviewна ресурс). - Добавить секцию → выберите тип в каталоге → заполните поля в инспекторе справа.
- Меняйте порядок перетаскиванием или Alt+↑ / Alt+↓ при выбранной секции в списке.
- Черновик уходит на сервер автоматически. Кнопка Сохранить черновик принудительно синхронизирует, если нужно.
- Preview или превью по центру вкладки покажет черновик (не публичный URL).
- Опубликовать скопирует черновик в
published_json. Проверьте страницу на фронте с[[!PageBuilder]]. - Снять с публикации уберёт секции с сайта, черновик в редакторе останется.
В боковой панели редактора блок Доставка и API показывает URL Public API и Agent API для текущего ресурса и номер revision.
Подробнее про первую страницу: Быстрый старт.
Сохранение и revision
Клиент отправляет connector mgr/page/save вместе с номером revision черновика. Сервер сравнивает revision с тем, что в базе.
Если два редактора (или две вкладки) сохранили один ресурс одновременно, приходит ответ revision_conflict. Редактор перезагружает документ с сервера. Обновите вкладку и сохраните снова, не подставляя revision вручную.
Перед Опубликовать клиент проверяет обязательные поля (required: true в JSON типа). При ошибке откроется инспектор первой проблемной секции.
События plugin: pbOnBeforeSave, pbOnAfterSave (режим черновика). В changes передаётся DocumentChangeSet: id секций, которые добавили, удалили, отправили в корзину или восстановили.
Публикация и снятие с публикации
Опубликовать (mgr/page/publish):
- копирует текущий черновик в
published_json; - увеличивает revision;
- сбрасывает кеш рендера ресурса
pagebuilder/{resourceId}.
Снять с публикации (mgr/page/unpublish) очищает опубликованный snapshot. Черновик не меняется. На сайте сниппет перестанет выводить секции.
События: pbOnBeforePublish, pbOnAfterPublish, pbOnBeforeUnpublish, pbOnAfterUnpublish.
Порядок секций и дубликат
В списке секций (outline):
- перетаскивание меняет порядок в черновике;
- 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 ресурса-источника. Нужны права save на оба ресурса и pagebuilder_save (или эквивалент через политику).
События: pbOnBeforeCopySections, pbOnAfterCopySections.
Копирование переносит выбранные блоки в черновик текущего ресурса. Это не публикация: на сайте изменения появятся только после Опубликовать на целевой странице.
Отмена и повтор
Undo и redo работают в памяти редактора до успешного сохранения черновика на сервер. После mgr/page/save история локальных действий обнуляется.
Быстрые правки одного поля сливаются в одну запись undo: откат вернёт последнее значение, а не каждый символ по отдельности.
Превью черновика
Публичный URL страницы показывает только опубликованные секции. Черновик смотрят так:
- кнопка Preview на вкладке Секции;
- iframe-превью по центру редактора после сохранения;
- прямой 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, затем очистите кеш сайта.
Render-события срабатывают только при промахе кеша. Для отладки plugin на рендере отключите кеш сниппета.
Демо-данные (Fake)
При pagebuilder_fake_enabled = 1 в инспекторе секции появляется кнопка Fake. Connector mgr/section/fake заполняет поля детерминированными демо-данными (один и тот же seed даёт одинаковый результат).
Полезно для вёрстки и скриншотов. Перед публикацией на боевой сайт замените fake-значения на реальный контент.
