
События и плагины
MiniShop3 работает на системе событий MODX. Плагин вмешивается в обработку корзины, заказов, товаров и покупателей без правки исходного кода.
Начало работы
- Работа с плагинами — как получить параметры, прервать операцию, модифицировать данные, передать данные между плагинами
События по категориям
Корзина
| Событие | Описание |
|---|---|
| msOnBeforeGetCart | Перед получением корзины |
| msOnGetCart | После получения корзины |
| msOnBeforeAddToCart | Перед добавлением товара |
| msOnAddToCart | После добавления товара |
| msOnBeforeChangeInCart | Перед изменением количества |
| msOnChangeInCart | После изменения количества |
| msOnBeforeChangeOptionsInCart | Перед изменением опций |
| msOnChangeOptionInCart | После изменения опций |
| msOnBeforeRemoveFromCart | Перед удалением товара |
| msOnRemoveFromCart | После удаления товара |
| msOnBeforeEmptyCart | Перед очисткой корзины |
| msOnEmptyCart | После очистки корзины |
| msOnGetStatusCart | Получение статуса корзины |
Заказ
| Событие | Описание |
|---|---|
| msOnBeforeAddToOrder | Перед добавлением поля в заказ |
| msOnAddToOrder | После добавления поля |
| msOnBeforeValidateOrderValue | Перед валидацией поля |
| msOnValidateOrderValue | После валидации поля |
| msOnErrorValidateOrderValue | Ошибка валидации |
| msOnBeforeRemoveFromOrder | Перед удалением поля |
| msOnRemoveFromOrder | После удаления поля |
| msOnBeforeEmptyOrder | Перед очисткой черновика заказа |
| msOnEmptyOrder | После очистки черновика |
| msOnSubmitOrder | Отправка заказа (витрина) |
| msOnBeforeMgrCreateOrder | Перед финализацией из админки |
| msOnMgrCreateOrder | После финализации из админки |
| msOnBeforeCreateOrder | Перед созданием заказа |
| msOnCreateOrder | После создания заказа |
Стоимость
| Событие | Описание |
|---|---|
| msOnBeforeGetCartCost | Перед расчётом стоимости корзины |
| msOnGetCartCost | После расчёта стоимости корзины |
| msOnBeforeGetDeliveryCost | Перед расчётом стоимости доставки |
| msOnGetDeliveryCost | После расчёта стоимости доставки |
| msOnBeforeGetPaymentCost | Перед расчётом комиссии оплаты |
| msOnGetPaymentCost | После расчёта комиссии оплаты |
| msOnBeforeGetOrderCost | Перед итогом заказа (корзина + доставка + оплата) |
| msOnGetOrderCost | После итога: можно править cost / cart_cost / delivery_cost / payment_cost |
Статус заказа
| Событие | Описание |
|---|---|
| msOnBeforeChangeOrderStatus | Перед сменой статуса |
| msOnChangeOrderStatus | После смены статуса |
Покупатель
| Событие | Описание |
|---|---|
| msOnBeforeGetOrderCustomer | Перед получением покупателя |
| msOnGetOrderCustomer | После получения покупателя |
| msOnBeforeGetOrderUser | Перед разрешением modUser при сабмите |
| msOnGetOrderUser | После разрешения modUser |
| msOnBeforeAddToCustomer | Перед добавлением поля |
| msOnAddToCustomer | После добавления поля |
| msOnBeforeValidateCustomerValue | Перед валидацией поля |
| msOnValidateCustomerValue | После валидации поля |
| msOnErrorValidateCustomerValue | Ошибка валидации |
| msOnBeforeCreateCustomer | Перед созданием покупателя |
| msOnCreateCustomer | После создания покупателя |
| msOnBeforeUpdateCustomer | Перед обновлением покупателя (процессор; ни админка, ни Web API его пока не вызывают) |
| msOnUpdateCustomer | После обновления покупателя (процессор; ни админка, ни Web API его пока не вызывают) |
| msOnBeforeAddCustomerAddress | Перед добавлением адреса |
| msOnAddCustomerAddress | После добавления адреса |
Товары (каталог)
| Событие | Описание |
|---|---|
| msOnGetProductPrice | Модификация цены товара |
| msOnGetProductWeight | Модификация веса товара |
| msOnGetProductFields | Модификация полей товара |
| msOnGetPublicSeo | После сборки публичных SEO (PublicSeoService, ms3_public_seo_tv_map) |
Сниппет msProducts
События для интеграции внешних пакетов (ms3Variants, msBrands и другие) без правки кода ядра.
| Событие | Описание |
|---|---|
| msOnProductsLoad | После загрузки списка товаров (bulk loading) |
| msOnProductPrepare | Подготовка данных каждого товара |
Параметр usePackages
Для активации загрузки данных укажите пакет в параметре сниппета: &usePackages='ms3Variants,msBrands'
Товары в заказе
| Событие | Описание |
|---|---|
| msOnBeforeCreateOrderProduct | Перед добавлением товара в заказ |
| msOnCreateOrderProduct | После добавления товара |
| msOnBeforeUpdateOrderProduct | Перед обновлением товара |
| msOnUpdateOrderProduct | После обновления товара |
| msOnBeforeRemoveOrderProduct | Перед удалением товара |
| msOnRemoveOrderProduct | После удаления товара |
Модель заказа (xPDO)
| Событие | Описание |
|---|---|
| msOnBeforeSaveOrder | Перед сохранением (xPDO) |
| msOnSaveOrder | После сохранения (xPDO) |
| msOnBeforeRemoveOrder | Перед удалением (xPDO) |
| msOnRemoveOrder | После удаления (xPDO) |
| msOnBeforeUpdateOrder | Зарезервировано — не вызывается (#844) |
| msOnUpdateOrder | Зарезервировано — не вызывается (#844) |
Уведомления
| Событие | Описание |
|---|---|
| msOnBeforeSendNotification | Перед отправкой уведомления |
| msOnAfterSendNotification | После отправки уведомления |
| msOnRegisterNotificationChannels | Регистрация каналов |
Производители
| Событие | Описание |
|---|---|
| msOnBeforeVendorCreate | Перед созданием производителя |
| msOnVendorCreate | После создания |
| msOnBeforeVendorUpdate | Перед обновлением |
| msOnVendorUpdate | После обновления |
| msOnBeforeVendorDelete | Перед удалением |
| msOnVendorDelete | После удаления |
Все шесть событий производителя вызывают только прежние процессоры Settings/Vendor/*. CRUD в админке идёт через Manager API, а он их не вызывает — подробности в событиях производителя и issue #847.
Импорт
| Событие | Описание |
|---|---|
| msOnBeforeImport | Перед началом импорта |
| msOnAfterImport | После завершения импорта |
| msOnImportRow | При обработке строки |
Админка
| Событие | Описание |
|---|---|
| msOnManagerCustomCssJs | Загрузка скриптов и стилей |
Отгрузки (shipment)
Логика — ShipmentLifecycleService (ms3_shipment_lifecycle), таблицы — ms3_shipments и ms3_shipment_events. Создание отгрузки и setTracking работают и при ms3_shipment_enabled=0, а вебхук доставки в этом случае отвечает 404. Before-события прерываются через success=false в ответе invokeEvent.
| Событие | Параметры | Когда |
|---|---|---|
msOnBeforeCreateShipment / msOnCreateShipment | before: order_id, delivery_id; after: shipment (запись) | create() |
msOnBeforeChangeShipmentStatus / msOnChangeShipmentStatus | before: shipment, status; after: shipment | transition() / вебхук службы доставки |
msOnBeforeUpdateShipmentTracking / msOnUpdateShipmentTracking | before: shipment, tracking_number; after: shipment | setTracking() / вебхук при смене трек-номера |
Статусы отгрузки: preparing, shipped, in_transit, delivered, cancelled, returned, failed (ShipmentStatus).
Остатки (inventory)
При ms3_inventory_enabled=1 работает ProductStockInventory (ms3_inventory), контракт — InventoryServiceInterface. Параметры событий: key (InventoryKey), qty, ctx (InventoryContext: orderId, origin). Before-событие с success=false приводит к InventoryException (ms3_err_inventory_cancelled). $notify=false у reserve и release пропускает пару событий — компенсация идёт внутри SQL-транзакции.
| Событие | Когда в статусах заказа |
|---|---|
msOnBeforeInventoryReserve / msOnInventoryReserve | Резерв на ms3_status_new (и перед commit, если заказ сразу переходит в paid) |
msOnBeforeInventoryCommit / msOnInventoryCommit | Commit на ms3_status_paid (повторно остаток не уменьшает) |
msOnBeforeInventoryRelease / msOnInventoryRelease | Release на ms3_status_canceled до commit. Также при сбое payment send() |
Изменения относительно miniShop2
| miniShop2 | MiniShop3 | Изменения |
|---|---|---|
product | msProduct | Переименован параметр |
msOnGetOrderCost | Остался + 3 частичных | Рядом: msOnGetCartCost, msOnGetDeliveryCost, msOnGetPaymentCost. Итог по-прежнему правите в msOnGetOrderCost |
| — | controller | Параметр во многих событиях контроллеров |
| — | msOnBeforeEmptyOrder / msOnEmptyOrder | Очистка черновика |
| — | msOnBeforeMgrCreateOrder / msOnMgrCreateOrder | Финализация из админки |
| — | msOnBeforeGetOrderUser / msOnGetOrderUser | modUser при сабмите |
| — | msOnBeforeValidateCustomerValue | Новое событие |
| — | msOnCreateCustomer | Новое событие |
| — | msOnAddCustomerAddress | Новое событие |
| — | msOnBeforeSendNotification | Новое событие |
| — | msOnImportRow | Новое событие |
| — | msOnProductsLoad | Интеграция внешних пакетов |
| — | msOnProductPrepare | Интеграция внешних пакетов |
| — | msOnGetPublicSeo | Публичные SEO Web API |
| — | msOn*Shipment* | Lifecycle отгрузки |
| — | msOn*Inventory* | Резерв/commit/release остатков |
Цепочки вызовов (куда смотреть в коде)
| Действие | События по порядку |
|---|---|
Очистка черновика (order/clean) | msOnBeforeEmptyOrder → reset полей → msOnEmptyOrder |
| Итог на витрине | cart/delivery/payment cost → msOnBeforeGetOrderCost → compose → msOnGetOrderCost (можно вернуть все 4 суммы) |
| Отправка заказа на витрине | msOnSubmitOrder → … → msOnBeforeCreateOrder → msOnCreateOrder |
| Финализация в админке | msOnBeforeMgrCreateOrder → msOnBeforeCreateOrder → msOnCreateOrder → msOnMgrCreateOrder |
Все имена выше зарегистрированы в MODX; список регистрации — _build/elements/events.php.
