Skip to content
ms3PromoCode
ms3PromoCode
Промо-коды для MiniShop3 с гибкими правилами, генерацией по маске и интеграцией в позиции заказа
  • MODX 3
  • PHP 8.2
  • miniShop3
  1. Компоненты
  2. ms3PromoCode
  3. Разработка

Разработка ​

Для разработчиков, которые расширяют или интегрируют ms3PromoCode.

Разделы ​

РазделОписание
События плагинаСобытия MS3, на которые подписан компонент
СервисыДоменные PHP-сервисы и DI
Правила (Rules)Стратегии правил фильтрации и как добавить свою
Модели и БДСтруктура таблиц и xPDO-моделей

Архитектура PHP-слоя ​

Controllers / Plugin
   │
   ├─→ ApplicationService (фасад)
   │     │
   │     ├─→ PromoCodeService    (CRUD + поиск + счётчик)
   │     ├─→ ValidationService   (lifecycle + min_order)
   │     ├─→ DiscountCalculator  (расчёт + распределение)
   │     └─→ RuleEngine          (matching по правилам)
   │           └─→ Rule strategies (ProductIds, Vendors, ...)
   │
   └─→ UsageTracker              (запись + откат + restore)
         └─→ PromoCodeService    (increment / decrement used_count)

Плагин MS3 вызывает UsageTracker напрямую на msOnCreateOrder и msOnChangeOrderStatus — в обход фасада, чтобы запись применения не зависела от повторного расчёта скидки.

Сервисы регистрируются в DI-контейнере MODX через bootstrap.php и доступны через $modx->services->get('ms3promocode_*').

Архитектура JS-слоя ​

window.ms3PromoCode (headless singleton: state + events)
   ▲    │
   │    ├─ .client → Ms3PromoCodeApiClient  (fetch wrapper)
   │    └─ .api    → Ms3PromoCodeAPI        (REST endpoints mapping)
   │
   └── Ms3PromoCodeUI (DOM-обёртка, необязательна)

UI обращается только к window.ms3PromoCode — без прямых HTTP-запросов.

Что можно расширить ​

РасширениеГде
Свой тип правилаДобавить класс в Rules/, подменить сервис ms3promocode_rule_engine в DI с полным списком стратегий
Реакция на событияПодписка на DOM ms3promocode:* или события MS3
Своя форма покупателяПапка переопределений для CSS/JS или собственный шаблон чанка
Свои методы Manager APIДобавить процессор в src/Processors/Mgr/ + connector.php
Свои системные настройкиДобавить в _build/elements/settings.php