Skip to content
PageBuilder
PageBuilder
Визуальный конструктор секций для MODX 3: черновик и публикация без перезаписи content ресурса
  • MODX 3
  • PHP 8.2
  • Vue 3
  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, 27 расширенных типов полей, глобальную корзину в панели управления и Agent API.

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

События

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

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

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

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

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

СобытиеКогдаДанные
pbOnBeforeSaveПеред записью черновикаresourceId, document, documentBag, revision, userId, mode=draft, changes
pbOnAfterSaveПосле записи черновикаresourceId, record, userId, mode=draft, changes
pbOnBeforePublishПеред публикациейresourceId, document, revision, userId
pbOnAfterPublishПосле публикацииresourceId, record, userId
pbOnBeforeUnpublishПеред снятиемresourceId, record, revision, userId
pbOnAfterUnpublishПосле снятияresourceId, record, userId
pbOnBeforeTrashПеред корзиной, только если есть удалённые секцииresourceId, sectionIds, document, userId
pbOnAfterTrashПосле записи черновика с теми же idresourceId, sectionIds, record, userId

documentBag это PageDocumentBag. Слушатель подменяет документ до saveDraft. changes это массив DocumentChangeSet: addedSectionIds, removedSectionIds, trashedSectionIds, restoredSectionIds, updatedSectionIds, enabledSectionIds, disabledSectionIds. События trash идут из того же saveDraft, отдельного действия корзины нет.

Копирование

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

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

СобытиеДанные
pbOnBeforeGetListresourceContext
pbOnAfterGetListresourceContext, items, result (FieldValuesBag, ключ items)
pbOnFieldValuesВ каталоге: resourceContext, fieldValues. В mgr/field/options: field, fieldValues
pbOnCheckSectionRequirementrequirement, result (FieldValuesBag, ключ satisfied)
pbOnCheckSectionVisibilitysection, conditions, result (FieldValuesBag, ключ visible)

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

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

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

СобытиеДанные
pbOnBeforeTableGetListtable, query, criteria по ссылке
pbOnTableRowSavetable, data по ссылке, row_id

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

СобытиеДанные
pbOnBeforeRenderDocumentresourceId, document, pipeline, options
pbOnBeforeRenderSectionresourceId, pipeline с одной секцией, index, options
pbOnGetValuesresourceId, document, values (SectionValuesBag). Сниппет при return_values=1 и Public API, если в include есть values

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

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, сниппет на сайте читает только опубликованную версию.

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