Skip to content
  1. Компоненты
  2. MiniShop3
  3. Разработка
  4. События

События и плагины ​

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 / msOnCreateShipmentbefore: order_id, delivery_id; after: shipment (запись)create()
msOnBeforeChangeShipmentStatus / msOnChangeShipmentStatusbefore: shipment, status; after: shipmenttransition() / вебхук службы доставки
msOnBeforeUpdateShipmentTracking / msOnUpdateShipmentTrackingbefore: shipment, tracking_number; after: shipmentsetTracking() / вебхук при смене трек-номера

Статусы отгрузки: 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 / msOnInventoryCommitCommit на ms3_status_paid (повторно остаток не уменьшает)
msOnBeforeInventoryRelease / msOnInventoryReleaseRelease на ms3_status_canceled до commit. Также при сбое payment send()

Изменения относительно miniShop2 ​

miniShop2MiniShop3Изменения
productmsProductПереименован параметр
msOnGetOrderCostОстался + 3 частичныхРядом: msOnGetCartCost, msOnGetDeliveryCost, msOnGetPaymentCost. Итог по-прежнему правите в msOnGetOrderCost
—controllerПараметр во многих событиях контроллеров
—msOnBeforeEmptyOrder / msOnEmptyOrderОчистка черновика
—msOnBeforeMgrCreateOrder / msOnMgrCreateOrderФинализация из админки
—msOnBeforeGetOrderUser / msOnGetOrderUsermodUser при сабмите
—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.