PageBuilder
Visual section builder for MODX 3. Draft and publish without overwriting resource content

Edition: Free. Requires the MIGX package. Without it the field stays in the CMP, but the grid does not mount (fallback: JSON textarea).
formtabs / columns like a TVrepeaterconfigs (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 (same as a MIGX TV value):
{
"items": [
{ "MIGX_id": 1, "title": "First" },
{ "MIGX_id": 2, "title": "Second" }
]
}The field key (for example items) stores a MIGX row array with MIGX_id and formtabs fields.
{foreach $items as $item}
<div>{$item.title|escape}</div>
{/foreach}| Key | Type | Role | Panel |
|---|---|---|---|
tab | string | Group subtitle | yes |
width | 25–100 | Field width % | yes |
description | string | Hint | yes |
default | array | Initial value | yes |
active | bool | Hide in inspector | yes |
required | bool | Required on publish | yes |
configs | string | MIGX config name | yes |
formtabs | string/array | Item form tabs | yes |
columns | string/array | Grid columns | yes |