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

Менеджер и события

Панель управления

Панель управления PageBuilder

Компонент в менеджере: Компоненты → PageBuilder (namespace pagebuilder, controller index).

В панели управления:

  • список ресурсов с секциями
  • переход к редактору секций
  • Типы секций (право pagebuilder_manage_types): UI-типы, скрытие и восстановление встроенных JSON-типов
  • Корзина (Pro, флаг basket): глобальная корзина удалённых секций и строк таблиц
  • настройки вкладок Collections при включённых pagebuilder_collections_*

Редактор на форме ресурса и в панели управления использует один Vue-бандл через VueTools. Точка входа API менеджера:

assets/components/pagebuilder/connector.php

Модель данных

Основная запись страницы: таблица pb_pages (префикс modx_pb_).

ПолеНазначение
resource_idСвязь с modResource
draft_jsonЧерновик документа секций
published_jsonОпубликованная версия
revisionНомер ревизии черновика (optimistic locking)
published_revisionРевизия последней публикации
publishedon / publishedbyВремя и пользователь публикации
editedon / editedbyПоследнее изменение черновика

modResource.content PageBuilder не перезаписывает. SEO-поля ресурса (pagetitle, description) используются как обычно.

Корзина на странице хранит удалённые секции в document.trash. При сохранении черновика плагин синхронизирует индекс pb_basket_items. Отдельного события pbOn* для корзины нет: плагин на pbOnAfterSave может читать record.draft.trash. Глобальное восстановление и окончательное удаление выполняют действия connector Pro (mgr/basket/*).

Табличные данные ресурса хранятся в отдельных таблицах pb_* (вкладка «Таблицы»).

PageBuilder Pro

Дополнение pagebuilderpro добавляет библиотеку, версии, пресеты, поля по breakpoints, 20 расширенных типов полей, глобальную корзину в панели управления и Agent API.

Подробно: PageBuilder Pro. Секции витрины требуют miniShop3.

События

При установке дополнение регистрирует 20 событий pbOn* в MODX. Подпишите плагин в Система → События или используйте статический плагин из состава пакета.

Исключение: pbOnBeforeTableGetList и pbOnTableRowSave установщик не создаёт. Если нужны хуки табличных данных, добавьте события вручную и подпишите плагин.

Регистрация при загрузке

СобытиеДанные
pbOnRegisterSectionDefinitionsregistry: SectionRegistry, добавление своих типов
pbOnRegisterFeatureProvidersregistry: FeatureProviderRegistry

Жизненный цикл страницы

СобытиеКогда
pbOnBeforeSave / pbOnAfterSaveЧерновик (mode=draft)
pbOnBeforePublish / pbOnAfterPublishПубликация
pbOnBeforeUnpublish / pbOnAfterUnpublishСнятие с публикации
pbOnBeforeTrash / pbOnAfterTrashУдаление секций в корзину

В pbOnAfterSave и аналогах поле changes содержит DocumentChangeSet (id добавленных, удалённых, отправленных в корзину и восстановленных секций).

Копирование

СобытиеДанные
pbOnBeforeCopySectionssourceResourceId, targetResourceId, userId
pbOnAfterCopySections+ record

Каталог и поля

СобытиеНазначение
pbOnBeforeGetList / pbOnAfterGetListСписок в каталоге (mgr/catalog/list)
pbOnFieldValuesFieldValuesBag: подстановка значений полей (mgr/field/options, picker)
pbOnCheckSectionRequirementrequirement, result.satisfied: проверка depends (pro, minishop3)
pbOnCheckSectionVisibilityPro: settings.conditions, result.visible, видимость секции на фронте

Табличные данные ресурса

Ручная регистрация

События ниже не регистрируются при установке. Добавьте их в Система → События, если плагин должен на них реагировать.

СобытиеКогда
pbOnBeforeTableGetListФильтрация строк (criteria передаётся по ссылке)
pbOnTableRowSaveПеред сохранением строки (data передаётся по ссылке)

Рендер на фронте

СобытиеДанные
pbOnBeforeRenderDocumentresourceId, document, pipeline, options
pbOnBeforeRenderSectionindex, pipeline: мутация секции перед chunk
pbOnGetValuesПри return_values=1 у сниппета

Пример регистрации секции в плагине:

php
<?php
switch ($modx->event->name) {
    case 'pbOnRegisterSectionDefinitions':
        /** @var \PageBuilder\Section\SectionRegistry $registry */
        $registry = $modx->event->params['registry'];
        $registry->registerFromFile($modx->getOption('core_path') . 'components/mypackage/sections/custom.json');
        break;
}

Свои JSON-определения должны соответствовать схеме встроенных секций: поля, chunk, category.

Сохранение, публикация и вывод на сайте

Редактор пишет черновик через connector, публикация копирует snapshot в published_json, сниппет на сайте читает только опубликованную версию.

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