Короткий ответ

Namespace, menu/action, ExtJS/manager controllers, processors, права и удобство поддержки. Разбираем практический порядок работ, риски, стоимость и то, как принять результат без новых проблем.

Ниже — конкретные проверки, команды, таблицы и контроль результата. Выполняйте изменения только после резервной копии, если действие затрагивает рабочую систему.

CMP — это интерфейс компонента, а не место бизнес-логики

Manager-часть должна вызывать processors/API компонента, а не содержать SQL и проверки прав только в JavaScript. Все критичные действия повторно проверяются на сервере.

Пример структуры собственного CMP

TEXT
core/components/myextra/
├── controllers/
│   └── mgr/
├── processors/
│   └── mgr/
├── model/
├── templates/
└── lexicon/

assets/components/myextra/
├── js/
│   ├── myextra.js
│   └── mgr/
└── css/
    └── mgr.css

Что должно быть в CMP

СлойОтветственность
Menu/namespace
од в компонент
Manager controllerподключение JS/CSS и view
ExtJS/grid/formинтерфейс
Processorсерверная операция и permissions
Model/xPDOданные
Lexiconтексты интерфейса

Processor должен проверять permission

PHP
if (!$this->modx->hasPermission('myextra_manage')) {
    return $this->failure($this->modx->lexicon('access_denied'));
}

// Дальше — валидация входных данных и действие.

Как проверить результат

После изменений повторите исходный сценарий, зафиксируйте результат и убедитесь, что соседние функции работают так же, как до правки. Если проблема проявляется не всегда, проведите несколько повторов в одинаковых условиях и сохраните диагностические данные.

Связанные материалы