
- MODX 3
- PHP 8.2
- Vue 3


Components → PageBuilder (SectionTypesManager.vue). Permission pagebuilder_manage_types is required for the Blocks tab. Other control panel tabs use standard manager permissions.
The Blocks tab is in Free. The UTM registry, Workspaces, and the other tabs require PageBuilder Pro.
| Tab | Layer | Purpose |
|---|---|---|
| Blocks | Free | UI builder for section types (pb_section_types) |
| UTM | Pro | Global UTM parameter registry (pb_utm_params), capability utm |
| Workspaces | Pro | Resource form tab sets by template (pb_collections), capability collections |
| Basket | Pro | Global basket for deleted sections and table rows |
| Page templates | Pro | Empty section skeletons (pb_page_templates), capability page-templates |
| Forms | Pro | Schemas for form builder, capability forms |
| Bundle | Pro | Export and import of UI section types |
| API tokens | Pro | Bearer tokens for REST API v1 |

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.
Requires capability 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. Already published visibility rules still run in Free.
Frontend UTM session: PageBuilderUtmSession before PageBuilder. Links: Snippets.
The control panel tab is labeled Workspaces. Requires PageBuilder Pro and capability collections. Without the capability the tabs are absent even when pagebuilder_collections_enabled = 1.
A collection binds to template_ids (empty list means all templates). With the setting on, legacy tabs resource_tab_enabled and resource_tables_tab_enabled are replaced by the dynamic set from the control panel.
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.
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 the section from draft.trash and the index row. published_json is unchanged |
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. After purge the section leaves the site only when you press Save on the resource.
Capability forms. On this tab you create a schema with a key and fields. For select and radio, fill Options: one line per choice, Label|value or value only. On the page, form builder selects that key. Submit goes through FetchIt and the PageBuilderFormBuilder snippet.
The server checks CSRF and the nospam honeypot. Email and webhook leave synchronously after commit, in the same HTTP request. Submissions are not stored. Form v1 does not accept a file. Processors: mgr/form/*.
Export UI section types, dry-run, and import in one transaction through UiSectionTypeService.
create, update, or conflict. A conflict is not imported.Bundle v1 does not include secrets, tokens, page content, table rows, forms, or datasources. Processors: mgr/bundle/*.
Capability api. A new token gets a name and scopes pages.read and catalog.read. The secret is shown once. System setting pagebuilder_rest_tokens keeps prefix and the hash.
A revoked token returns 401. Enable the transport with pagebuilder_rest_api_enabled. Routes: REST API v1. Processors: mgr/resttoken/*.