Commerce устанавливает на сайт дополнительные события, которые можно перехватывать с помощью плагинов, и тем самым добавлять свою логику в процессы магазина.
В основном в событиях используется передача параметров по ссылке, т.е. чтобы изменить что-то, не нужно возвращать результат - достаточно изменить значение параметра. Небольшой пример:
switch ($modx->event->name) {
    case 'OnBeforeCartItemAdding': {
        $params['item']['price'] += 100;
        break;
    }
}Здесь видно два важных момента:
$modx->event->name вместо сложившейся практики сохранения ссылки на $modx->Event, так как Commerce активно использует вложенные события (http://modx.im/blog/docs/5933.html).$params, а не переменная $item, так как ссылка есть только в массиве.Старт инициализации основного плагина. Параметров нет.
Может использоваться для регистрации клиентских скриптов, которые зависят от Commerce, для регистрации дополнительных корзин, хранилищ, добавления элементов в контейнер зависимостей и пр.
switch ($modx->event->name) {
    case 'OnInitializeCommerce': {
        ci()->set('myCustomClass', function($ci) use ($params) {
            require_once MODX_BASE_PATH . 'path/to/CustomClass.php';
            return new CustomClass($params);
        });
        $modx->regClientScript('path/to/custom-commerce-script.js');
        break;
    }
}Вызывается после того, как основной плагин инициализирован, корзины и вспомогательные сервисы зарегистрированы. Параметров нет.
Вызывается в момент получения обработчика заказов. Можно зарегистрировать свой обработчик. Параметров нет.
class CustomOrdersProcessor implements \Commerce\Interfaces\Processor {
    ...
}
switch ($modx->event->name) {
    case 'OnInitializeOrderProcessor': {
        $processor = new CustomOrdersProcessor($modx);
        $modx->commerce->setProcessor($processor);
        break;
    }
}Вызывается в момент инициализации сниппета Order, позволяет редактировать параметры вызова (правила валидации, параметры отправки и пр.)
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| config | Да | Массив с параметрами вызова сниппета Order | 
switch ($modx->event->name) {
    case 'OnInitializeOrderForm': {
        $params['rules']['msg'] = [
            'required' => 'Заполните комментарий к заказу!',
        ];
        break;
    }
}Вызывается в разные моменты работы пакета для получения массива дополнительных сборов заказа. Сюда можно включить, например, выбранный покупателем способ доставки и ее стоимость, размер скидки или комиссии.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| rows | Да | Массив строк, каждая строка представляет собой массив с ключами titleиprice- название и цена соответственно. | 
| total | Да | Итоговая стоимость заказа | 
| realonly | Нет | Принимает значение true, если собираются только элементы, которые реально изменяют стоимость заказа. Это имеет смысл, чтобы не сохранять с заказом сугубо информативные элементы. | 
switch ($modx->event->name) {
    case 'OnCollectSubtotals': {
        $params['total'] += 100;
        $params['rows']['fee'] = [
            'title' => 'Комиссия магазина',
            'price' => 100,
        ];
        break;
    }
}Чтобы выводить дополнительный сбор только после перехода покупателя к оформлению заказа, можно использовать метод обработчика заказов isOrderStarted():
if ($modx->commerce->loadProcessor()->isOrderStarted()) {
    // добавляем стоимость доставки
}Если вывод также зависит от выбранного способа доставки или оплаты, можно использовать методы обработчика getCurrentDelivery() и getCurrentPayment():
$processor = $modx->commerce->loadProcessor();
if ($processor->getCurrentDelivery() == 'mydelivery' && $processor->getCurrentPayment() == 'mypayment') {
    // добавляем стоимость доставки
}Сбор всех доступных покупателю способов доставки заказа.
Параметры:
| Имя параметра | Передается по ссылке | Описание | ||||||
|---|---|---|---|---|---|---|---|---|
| rows | Да | Массив строк  
 | 
switch ($modx->event->name) {
    case 'OnRegisterDelivery': {
        $params['rows']['mydelivery'] = [
            'title' => 'Доставка',
            'price' => 100,
        ];
        break;
    }
}Сбор всех доступных покупателю способов оплаты. Параметров нет.
class CustomPayment implements \Commerce\Interfaces\Payment {
    ...
}
switch ($modx->event->name) {
    case 'OnRegisterPayments': {
        $class = new CustomPayment($modx, $params);
        $modx->commerce->registerPayment('mypayment', 'Мой способ платежа', $class);
        break;
    }
}Часто бывает так, что способы оплаты заказа зависят от выбранного способа доставки. В таком случае можно использовать метод обработчика заказа getCurrentDelivery() для организации условий:
if ($modx->isBackend() || $modx->commerce->loadProcessor()->getCurrentDelivery() == 'mydelivery') {
    // регистрируем обработчик платежа
}Важно также заметить, что в этом примере используется проверка $modx->isBackend(), чтобы пользовательские условия не влияли на доступность метода оплаты при редактировании и просмотре заказов в панели администрирования.
Вызывается перед выводом способов доставки и оплаты, после их регистрации. Можно изменить выбранный способ, изменить их состав. Удобно, когда доставка зависит от оплаты, или наоборот.
Из-за того, что корзины выводятся отдельно от формы заказа, и обычно раньше ее, изменение способов доставки никак не повлияет на дополнительные сборы, установленные данными способами доставки, и на общую сумму заказа.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| payments | Да | Массив способов оплаты | 
| delivery | Да | Массив способов доставки | 
| current_payment | Да | Выбранный способ оплаты | 
| current_delivery | Да | Выбранный способ доставки | 
switch ($modx->event->name) {
    case 'OnBeforeOrderAddonsRender': {
        if (isset($params['delivery']['pickup'])) {
        // добавляем пояснение для самовывоза
            $params['delivery']['pickup']['markup'] .= '<p>Дождитесь звонка оператора для согласования времени самовывоза!</p>';
    }
    if (isset($params['payments']['cash']) && $params['current_delivery'] != 'pickup') {
        // если доставка - не самовывоз, убираем способ оплаты наличными
        unset($params['payments']['cash']);
    }
    break;
    }
}Вызывается перед отправкой ответа сервера при ajax-запросе, например при добавлении в корзину или обновлении корзин. Позволяет модифицировать ответ.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| response | Да | Массив элементов, из которых состоит ответ сервера. Ключ statusесть в любом случае, он может принимать значенияsuccessилиfailedи означает, успешен ли запрос или нет. Остальные элементы в разных запросах различаются. | 
switch ($modx->event->name) {
    case 'OnCommerceAjaxResponse': {
        $url = trim($_GET['q'], '/');
        if ($url == 'commerce/action' && $_POST['action'] == 'cart/add') {
            $params['response']['myparam'] = 'myresponse';
        }
    break;
    }
}Вызывается перед добавлением товара в корзину. Позволяет отменить действие, либо модифицировать атрибуты добавляемого товара.
Параметры:
| Имя параметра | Передается по ссылке | Описание | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| instance | Нет | Тип корзины | ||||||||||||
| prevent | Да | Флаг отмены действия. Если переключить в true, товар не будет добавлен. | ||||||||||||
| item | Да | Массив с атрибутами добавляемого товара. Элементы следующие: 
 | 
switch ($modx->event->name) {
    case 'OnBeforeCartItemAdding': {
        if ($params['item']['price'] < 100) {
            $params['prevent'] = true;
            $modx->event->stopPropagation();
        }
        break;
    }
}Вызывается перед изменением товара в корзине. Позволяет модифицировать изменяемые атрибуты.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| instance | Нет | Тип корзины | 
| row | Да | Идентификатор изменяемой строки корзины | 
| item | Да | Массив с уже измененными атрибутами товара | 
| wasadded | Нет | Флаг, означающий, что первым действием было добавление товара | 
| prevent | Да | Флаг отмены действия. Если переключить в true, товар не будет изменен | 
Вызывается перед удалением товара из корзины. Позволяет отменить удаление либо изменить товар, который нужно удалить.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| by | Нет | row или id | 
| row | Да | Идентификатор изменяемой строки корзины, определен, только если если by = row | 
| id | Да | Идентификатор товара, определен, только если если by = id | 
| prevent | Да | Флаг отмены действия. Если переключить в true, товар не будет удален | 
Вызывается перед очисткой корзины. Позволяет отменить очистку.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| instance | Нет | Тип корзины | 
| prevent | Да | Флаг отмены действия. Если переключить в true, корзина не будет очищена | 
Вызывается после любого изменения корзины.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| instance | Нет | Тип корзины | 
switch ($modx->event->name) {
    case 'OnCartChanged': {
        if ($params['instance'] == 'products') {
            $cart = ci()->carts->getCart($params['instance']);
            if ($cart) {
                $items = $cart->getItems();
                if (count($items)) {
            // для примера увеличим количество товара в первой строке
                    $row = key($items);
                    $items[$row]['count'] += 1;
                    $cart->setItems($items);
                }
            }
        }
        break;
    }
}Вызывается при изменении данных в процессе оформления заказа.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| data | Нет | Данные заказа | 
Вызывается после валидации данных заказа, до создания самого заказа. Позволяет модифицировать как данные покупателя, так и состав корзины заказа.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| FL | Да | FormLister | 
| items | Да | Массив с товарами корзины | 
| prevent | Да | Флаг отмены действия. Если переключить в true, произойдет отмена заказа | 
switch ($modx->event->name) {
    case 'OnBeforeOrderProcessing': {
        $FL->setField('name', 'Вася');
        break;
    }
}Если требуется отменить заказ, желательно добавить сообщение пользователю:
switch ($modx->event->name) {
    case 'OnBeforeOrderProcessing': {
        $params['prevent'] = true;
        $FL->addMessage('Заказ отменен!');
        break;
    }
}Вызывается перед созданием платежа - после создания заказа (если был выбран какой-либо способ платежа), либо при оплате ранее созданного заказа по специальной ссылке.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order | Да | Массив с данными заказа | 
| payment | Нет | Массив с описанием и классом обработчика платежа | 
| FL | Да | FormLister. Присутствует только в процессе оформления заказа | 
| instant_redirect | Да | Если 1 - покупатель сразу будет перенаправлен в платежную систему, 0 - будет показан шаблон redirect_template | 
| redirect_text | Да | Текст сообщения о перенаправлении на оплату. Присутствует только в процессе оформления заказа | 
| redirect_template | Да | Шаблон текста уведомления об оформлении заказа и перенаправлении на оплату | 
switch ($modx->event->name) {
    case 'OnBeforePaymentProcess': {
        if (isset($FL) && $order['fields']['payment_method'] == 'mypayment') {
        $params['redirect_text'] = 'Перенаправление!';
    }
        break;
    }
}Вызывается при создании и сохранении платежа, позволяет изменить сумму.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order_id | Нет | Идентификатор заказа, который оплачивается | 
| order_amount | Нет | Стоимость заказа | 
| amount | Да | Сумма платежа, за вычетом суммы оплаченных ранее траншей | 
| hash | Да | Хэш платежа, для формирования ссылок | 
switch ($modx->event->name) {
    case 'OnBeforePaymentCreate': {
        // получаем данные формы заказа
        $data = ci()->commerce->loadProcessor()->getRawData();
        // если включена предоплата, уменьшаем сумму вполовину
        if (!empty($data['partial'])) {
            $params['amount'] = $params['amount'] * 0.5;
        }
        break;
    }
}Вызывается перед самым сохранением заказа в базу данных, когда все данные собраны, при создании, либо обновлении заказа. Позволяет полностью изменить заказ. Отменить сохранение нельзя.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order_id | Нет | Идентификатор заказа, nullесли заказ новый | 
| values | Да | Значения полей для сохранения в таблицу commerce_orders | 
| items | Да | Массив товаров, подготовленный для сохранения в таблицу commerce_order_products | 
| subtotals | Да | Массив доп.сборов, сохраняется также в commerce_order_products в облегченной форме | 
Вызывается после сохранения заказа, перед отправкой уведомления менеджеру.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| FL | Да | FormLister | 
| order | Да | Данные заказа | 
| cart | Да | Данные сохраненной корзины | 
Вызывается после сохранения заказа в базу данных.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| mode | Нет | При создании заказа - "new", при обновлении - "upd" | 
| order_id | Нет | Идентификатор заказа | 
| values | Да | Значения полей из таблицы commerce_orders | 
| items | Да | Массив товаров из таблицы commerce_order_products | 
| subtotals | Да | Массив доп.сборов из таблицы commerce_order_products | 
Вызывается после окончания обработки заказа.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| FL | Да | FormLister | 
| order | Нет | Данные заказа | 
| cart | Нет | Данные сохраненной корзины | 
Вызывается после оплаты заказа (полной или частичной).
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order_id | Нет | Идентификатор заказа | 
| order | Нет | Данные заказа | 
| status_id | Нет | Идентификатор статуса заказа после оплаты | 
| payment | Нет | Данные платежа | 
| total | Нет | Полная сумма всех платежей по заказу | 
| fully_paid | Нет | true, если заказ полностью оплачен | 
Вызывается перед сменой текущей валюты. Позволяет подменить новую валюту на другую. Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| old | Нет | Символьный идентификатор текущей валюты | 
| new | Да | Символьный идентификатор устанавливаемой валюты | 
Вызывается после назначения плейсхолдеров с данными заказа на странице переадресации после успешного оформления заказа или проведения оплаты.
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order | Нет | Данные заказа | 
Вызывается перед добавлением истории заказа. Позволяет изменить статус и комментарий, либо отменить добавление или уведомление покупателя.
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order_id | Нет | Идентификатор заказа | 
| order | Нет | Данные заказа | 
| status_id | Да | Идентификатор назначаемого статуса заказа | 
| comment | Да | Комментарий | 
| notify | Да | Нужно ли уведомлять покупателя об изменении статуса, trueилиfalse | 
| prevent | Да | Отменить изменение истории, trueилиfalse | 
switch ($modx->event->name) {
    case 'OnBeforeOrderHistoryUpdate': {
        if ($status_id == 4) {
        $params['prevent'] = true;
            $modx->event->stopPropagation();
    }
    if ($status_id == 10) {
        $params['comment'] = 'Мой комментарий';
    }
    }
}Вызывается перед уведомлением покупателя при изменении истории заказа или изменении данных заказа. Позволяет изменить уведомление либо отменить отправку.
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| reason | Нет | Тип события: order_changed- добавление истории заказаstatus_changed- изменение данных заказа | 
| order | Да | Данные заказа | 
| subject | Да | Шаблон темы письма-уведомления | 
| body | Да | Шаблон текста письма-уведомления | 
| data | Да | Данные, которые будут использоваться при парсинге шаблонов письма | 
| prevent | Да | Отменить отправку уведомления, trueилиfalse | 
Эти события вызываются при работе менеджера с заказами в панели администрирования магазином.
Вызывается перед выводом списка заказов. Позволяет модифицировать вывод.
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| config | Да | Конфигурация DocLister. Вывод формируется его контроллером onetable | 
| columns | Да | Конфигурация колонок - массив пар идентификатор колонки=>параметры колонки | 
| filters | Да | Конфигурация фильтров | 
Параметры конфигурации DocLister по умолчанию:
[
    'orderBy'         => 'created_at DESC',
    'display'         => 10,
    'paginate'        => 'pages',
    'TplWrapPaginate' => '@CODE:<ul class=""></ul>',
    'TplCurrentPage'  => '@CODE:<li class="page-item active"><span class="page-link"></span></li>',
    'TplPage'         => '@CODE:<li class="page-item"><a href="" class="page-link page" data-page=""></a></li>',
    'TplNextP'        => '@CODE:',
    'TplPrevP'        => '@CODE:',
];В параметрах колонок можно использовать следующие параметры:
| Имя параметра | Описание | 
|---|---|
| title | Заголовок колонки | 
| content | Содержимое. Может быть строкой - именем поля из заказа, либо анонимной функцией со следующими  параметрами: $data- данные заказа$DL- ссылка на объект $_DocLister$eDL- ссылка на объект $_extDocLister | 
| sort | Индекс для сортировки | 
| style | Css-стиль колонки, добавляется к каждой ячейке | 
Конфигурация колонок по умолчанию:
[
    'id' => [
        'title'   => '#',
        'content' => 'id',
        'sort'    => 0,
        'style'   => 'width: 1%; text-align: center;',
    ],
    ...
    'name' => [
        'title'   => $lang['order.name_field'],
        'content' => 'name',
        'sort'    => 20,
    ],
    ...
    'email' => [
        'title'   => $lang['order.email_field'],
        'content' => function($data, $DL, $eDL) {
            if (!empty($data['email']) && filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
                return '<a href="mailto:' . $data['email'] . '">' . $data['email'] . '</a>';
            }
            return '';
        },
        'sort'    => 40,
        'style'   => 'white-space: nowrap;',
    ],
    ...
];Пример:
switch ($modx->event->name) {
    case 'OnManagerBeforeOrdersListRender': {
        $params['config']['display'] = 50;
        $params['columns']['lastname'] = [
            'title'   => 'Фамилия',
            'content' => function($data, $DL, $eDL) {
                if (!empty($data['fields']['lastname'])) {
                    return htmlentities($data['fields']['lastname']);
                }
                return '';
            },
            'sort' => 23,
        ];
    }
}Это стандартное событие Modx, рассчитанное на получение строки, которая будет выведена в конце страницы со списком заказов. Для установки значения нужно использовать метод $modx->event->setOutput().
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| orders | Нет | Массив заказов для вывода | 
Вызывается перед выводом детальной информации о заказе
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order | Да | Данные заказа | 
| groups | Да | Конфигурация групп с информацией о заказе | 
| config | Да | Конфигурация DocLister для вывода товаров из заказа | 
| columns | Да | Конфигурация колонок для вывода товаров заказа | 
| subcolumns | Да | Конфигурация колонок для вывода дополнительных сборов | 
Пример:
switch ($modx->Event->name) {
    case 'OnManagerBeforeOrderRender': {
        $params['groups']['order_info']['fields']['msg'] = [
            'title' => 'Комментарий',
            'content' => function($data) {
                return !empty($data['fields']['msg']) ? htmlentities($data['fields']['msg']) : '';
            },
            'sort' => 40,
        ];
    unset($params['columns']['options']);
    break;
    }
}Это стандартное событие Modx, рассчитанное на получение строки, которая будет выведена в конце страницы детального просмотра заказа. Для установки значения нужно использовать метод $modx->event->setOutput().
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order | Нет | Массив с данными заказа | 
| products | Нет | Массив с товарами заказа | 
| subtotals | Нет | Массив с доп.сборами заказа | 
Вызывается перед выводом страницы редактирования заказа.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order | Да | Данные заказа | 
| fields | Да | Конфигурация полей заказа | 
| config | Да | Конфигурация DocLister для вывода товаров из заказа | 
| columns | Да | Конфигурация колонок для вывода полей редактирования товаров заказа | 
| subcolumns | Да | Конфигурация колонок для вывода дполей редактирования ополнительных сборов | 
Это стандартное событие Modx, рассчитанное на получение строки, которая будет выведена в конце страницы редактирования заказа. Для установки значения нужно использовать метод $modx->event->setOutput().
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order | Нет | Массив с данными заказа | 
| products | Нет | Массив с товарами заказа | 
| subtotals | Нет | Массив с доп.сборами заказа | 
Вызывается при сохранении отредактированного заказа перед валидацией новых значений.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order | Нет | Оригинальные данные заказа | 
| data | Да | Массив с новыми данными и провилами их проверки. Для проверки правил используется валидатор из комплекта FormLister. | 
Структура массива с новыми данными:
[
    'order' => [
        'data'  => [
            // данные заказа
            'name' => 'Вася',
            'email' => 'test@test.test',
            ...
        ],
        'rules' => [
            // правила проверки, например:
            '!name' => [
                'lengthBetween' => [
                    'params' => [2, 255],
                    'message' => $lang['module.error.name_length'],
                ],
            ],
            'email' => [
                'email' => $lang['module.error.email_incorrect'],
            ],
            ...
        ],
    ],
    'cart' => [
        'data'  => [
            // данные корзины заказа
        ],
        'rules' => [
            // правила проверки
        ],
    ],
    'subtotals' => [
        'data'  => [
            // данные дополнительных сборов заказа
        ],
        'rules' => [
            // правила проверки
        ],
    ],
];Вызывается после проверки данных заказа, независимо от того, пройдена проверка или нет.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| order | Нет | Данные заказа | 
| data | Да | Данные из события OnManagerBeforeOrderValidating | 
| errors | Да | Массив с ошибками. Если массив пустой - валидация пройдет успешно, если нет - редактирование заказа будет отменено, а ошибки будут выведены на экран | 
Это стандартное событие Modx, рассчитанное на получение строки, которая будет выведена в конце страницы со списком статусов заказов. Для установки значения нужно использовать метод $modx->event->setOutput().
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| list | Нет | Массив со статусами заказов | 
Это стандартное событие Modx, рассчитанное на получение строки, которая будет выведена в конце страницы редактирования статуса заказов. Для установки значения нужно использовать метод $modx->event->setOutput().
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| status | Нет | Массив с данными статуса заказов | 
Это стандартное событие Modx, рассчитанное на получение строки, которая будет выведена в конце страницы со списком валют. Для установки значения нужно использовать метод $modx->event->setOutput().
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| list | Нет | Массив со списком валют | 
Это стандартное событие Modx, рассчитанное на получение строки, которая будет выведена в конце страницы редактирования валюты. Для установки значения нужно использовать метод $modx->event->setOutput().
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| status | Нет | Массив с данными валюты | 
Вызывается при сохранении валюты, в случае, если редактируемая валюта назначается валютой по умолчанию.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| old | Нет | Данные валюты, которая была установлена по умолчанию прежде | 
| new | Да | Данные валюты, назначаемой по умолчанию | 
Вызывается перед орбаботкой пути при работе в модуле в панели администрирования. Дает возможность зарегистрировать свой контроллер.
Параметры:
| Имя параметра | Передается по ссылке | Описание | 
|---|---|---|
| module | Да | Ссылка на класс-менеджер модуля \Commerce\Module\Manager | 
class MyController extends \Commerce\Module\Controllers\Controller implements \Commerce\Module\Interfaces\Controller
{
    ...
}
switch ($modx->Event->name) {
    case 'OnManagerRegisterCommerceController': {
        $module->registerController('customroute', new MyController($modx, $module));
    break;
    }
}