
PageBuilder control panel
Components → PageBuilder (SectionTypesManager.vue). Permission pagebuilder_manage_types is required for the Blocks tab. Other control panel tabs use standard manager permissions.
Four site-level tabs plus Pro registries, not a single resource:
| Tab | Layer | Purpose |
|---|---|---|
| Blocks | Free | UI builder for section types (pb_section_types) |
| UTM | Free | Global UTM parameter registry (pb_utm_params) |
| Collections | Free | Resource form tab sets by template (pb_collections) |
| Basket | Pro | Global basket for deleted sections and table rows |
| Page templates | Pro | Empty section skeletons (pb_page_templates), capability page-templates |

Blocks
CRUD section types without PHP deploy. Built-in JSON from core/components/pagebuilder/sections/*.json can be edited, hidden, and restored in the catalog via the control panel.
Filter by source (chips, choice persists in the browser):
| Chip | Shows |
|---|---|
| All | Package and custom types |
| From package | Types from package JSON (and their DB UI overrides) |
| Mine | Types created in the control panel |
Hide presets bulk-hides package types (published = 0 for UI overrides and custom; for code types hide still goes through lifecycle). Custom types remain. Sections on already built pages are unchanged.
On the type card, Catalog preview: upload a layout screenshot. In + Create on the resource it replaces the package schematic image.
With capability presets (Pro), the Blocks tab has Show examples in catalog toggle that writes pagebuilder_catalog_examples_enabled via mgr/config/save. Same value in system settings.
| Action | What happens |
|---|---|
| Override | Row in pb_section_types, flag overridesCode. DB wins at runtime |
| Hide | Type hidden in resource catalog, stays in control panel with "Hidden" badge |
| Delete (code type) | Tombstone removedCode in DB. Package JSON is not deleted |
| Restore | Enable "Show hidden" → Restore |
On extra upgrade, pb_section_types rows are not overwritten: DB wins. User system settings are not reset either (update.settings = false). Sections on already published pages keep rendering.
Connector mgr/sectiontype/remove accepts POST parameter lifecycle: hide, remove, restore (not the connector action). Bulk hide passes array keys.
JSON schema details: Developer → Section definition.
UTM
Parameters for {{utm:key}} placeholders and default values. Section visibility rules are set in the Visibility dialog on the resource inspector (settings.utm) when pagebuilder_inspector_visibility_enabled is on. Not on this tab.
Frontend UTM session: PageBuilderUtmSession before PageBuilder. Links: Snippets.
Collections
A collection binds to template_ids (empty list means all templates). With pagebuilder_collections_enabled = 1, legacy tabs resource_tab_enabled and resource_tables_tab_enabled are replaced by the dynamic set from the control panel.
Tab types (tab_type)
| Type | Behavior on resource |
|---|---|
sections | Sections tab (Vue pagebuilder-resource) |
table | Resource table data (table_key optional) |
resources | Child resources |
empty | Placeholder (config.message) |
modx_collections | MODX Collections integration (pagebuilder_collections_modx_bridge_enabled) |
iframe | URL in <iframe> |
Collection CRUD and tab resolution for a template: mgr/collection/list, save, remove, resolve.
Settings: System settings → Collections.
Basket (Pro)
Flag basket. Page basket in the resource draft remains in Free.
Index of sections from draft.trash[] and table rows on delete. Sync on pbOnAfterSave. On resource OnEmptyTrash, index rows for that resource_id are removed.
| Action | Purpose |
|---|---|
mgr/basket/list | List (item_type, pagination) |
mgr/basket/restore | Restore section or table row |
mgr/basket/purge | Remove entry from index |
mgr/basket/restoreall / purgeall | Bulk ops on array ids |
| Where | What it does |
|---|---|
| Resource editor → Basket | On page: restore and permanent delete in draft (Free) |
| Control panel → Basket | Cross-resource: list, restore to source resource, permanent delete (Pro) |
Restore from the control panel inserts the section at settings._trashIndex, same as the page basket.
