
ms3PromoCode
Промо-коды для MiniShop3 с гибкими правилами, генерацией по маске и интеграцией в позиции заказа
- MODX 3
- PHP 8.2
- miniShop3


Для разработчиков, которые расширяют или интегрируют ms3PromoCode.
| Раздел | Описание |
|---|---|
| События плагина | События MS3, на которые подписан компонент |
| Сервисы | Доменные PHP-сервисы и DI |
| Правила (Rules) | Стратегии правил фильтрации и как добавить свою |
| Модели и БД | Структура таблиц и xPDO-моделей |
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_*').
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 |