
PageBuilder
Visual section builder for MODX 3: draft and publish without overwriting resource content
- MODX 3
- PHP 8.2
- Vue 3


Version: Free. Requires the MIGX package. Without it the field stays in the CMP, but the grid does not mount: a JSON textarea and a Retry MIGX button.
A real ExtJS MIGX TV grid, not a Vue repeater.
repeaterconfigs (MIGX → Configs)Via MIGX Configs:
{
"name": "items",
"type": "migx",
"label": "Items",
"configs": "my_migx_config",
"tab": "Content",
"width": 100,
"active": true
}Or inline formtabs / columns (same as TV input properties):
{
"name": "items",
"type": "migx",
"label": "Items",
"formtabs": "[{\"caption\":\"Item\",\"fields\":[{\"field\":\"title\",\"caption\":\"Title\"}]}]",
"columns": "[{\"header\":\"Title\",\"dataIndex\":\"title\",\"width\":160}]"
}migxConfig / migx_config are aliases for configs.
JSON array of objects: MIGX_id and formtabs fields, same as a MIGX TV value.
The field key (for example items) stores a MIGX row array:
{
"items": [
{ "MIGX_id": 1, "title": "First" },
{ "MIGX_id": 2, "title": "Second" }
]
}[[+items.0.title]]{foreach $items as $item}
<div>{$item.title|pb_text}</div>
{/foreach}For fields with name that are stored in the section data:
| Key | Type | Role | CMP |
|---|---|---|---|
tab | string | Group subtitle in the inspector | yes |
width | 25, 33, 50, 66, 75, 100 | Field width as % of the row (flex). The CMP offers only these values | yes |
description | string | Hint under the label | yes |
default | array | Initial value for a new section | yes |
active | bool | false hides the field in the inspector | yes |
required | bool | Required on publish (draft still saves) | yes |
configs | string | MIGX config name | yes |
formtabs | string/array | Item form tabs | yes |
columns | string/array | Grid columns | yes |
See fields overview.