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_*

Списка ресурсов с секциями и перехода к редактору вкладки Секции в CMP нет. Редактор — вкладка ресурса (VueTools).

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

assets/components/pagebuilder/connector.php

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

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

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

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

Корзина на странице хранит удалённые секции в document.trash. При сохранении черновика с непустыми trashedSectionIds срабатывают pbOnBeforeTrash / pbOnAfterTrash. Плагин на 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

Библиотека (Pro, runtime) ​

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

pbOnLibraryItemSave установщик не создаёт. Добавьте событие в Система → События, если нужен плагин.

СобытиеКогдаДанные
pbOnLibraryItemSaveПосле записи элемента Libraryпараметры из LibraryService (id, payload)

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

СобытиеДанные
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

Кадрирование ​

СобытиеКогдаДанные
pbOnAfterMediaCropПосле записи кадра, до ответа менеджеруsourceUrl, sourcePath, path, geometry, result (MediaCropResult)

Плагин дописывает $result->variants. Они лежат в crops поля image. Пример: поле image.

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

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. Публикация копирует снимок в published_json. Сниппет на сайте читает только опубликованную версию.

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