Короткий ответ
Namespace, menu/action, ExtJS/manager controllers, processors, права и удобство поддержки. Разбираем практический порядок работ, риски, стоимость и то, как принять результат без новых проблем.
Ниже — конкретные проверки, команды, таблицы и контроль результата. Выполняйте изменения только после резервной копии, если действие затрагивает рабочую систему.
CMP — это интерфейс компонента, а не место бизнес-логики
Manager-часть должна вызывать processors/API компонента, а не содержать SQL и проверки прав только в JavaScript. Все критичные действия повторно проверяются на сервере.
Пример структуры собственного CMP
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
if (!$this->modx->hasPermission('myextra_manage')) {
return $this->failure($this->modx->lexicon('access_denied'));
}
// Дальше — валидация входных данных и действие.Как проверить результат
После изменений повторите исходный сценарий, зафиксируйте результат и убедитесь, что соседние функции работают так же, как до правки. Если проблема проявляется не всегда, проведите несколько повторов в одинаковых условиях и сохраните диагностические данные.