ms3PromoCode
Промо-коды для 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)Все сервисы регистрируются в DI-контейнере MODX через bootstrap.php и доступны через $modx->services->get('ms3promocode_*').
window.ms3PromoCode (headless)
│
├─ Ms3PromoCodeApiClient (fetch wrapper)
├─ Ms3PromoCodeAPI (REST endpoints mapping)
└─ ms3PromoCode (singleton: state + events)
▲
│
└── Ms3PromoCodeUI (DOM-обёртка, опционально)UI-слой использует только публичный API headless-ядра — не лезет напрямую в HTTP.
| Расширение | Где |
|---|---|
| Свой тип правила | Добавить класс в Rules/ + регистрация в RuleEngine |
| Реакция на свои события | Подписка на DOM ms3promocode:* или MS3 events |
| Кастомизация формы покупателя | Override-папка для CSS/JS или собственный шаблон чанка |
| Свои Manager API endpoints | Добавить процессор в src/Processors/Mgr/ + connector.php |
| Кастомные системные настройки | Добавить в _build/elements/settings.php |