ms3Discounts

Полноценная система скидок и акций для MiniShop3
Автор дополнения
Иван Бочкарев
Пакетов
44
Закачек
288
Обычно отвечает в течение суток
Автор дополнения
Пакетов
44
Закачек
288
Обычно отвечает в течение суток
Версия 1.0.0-pl
Дата выпуска 26.09.2026
Загрузки 0
Просмотры 8
Внимание, этот компонент требует PHP 8.2 или выше!
Внимание, этот компонент требует MODX 3 или выше.
ms3Discounts — полноценная система скидок и акций для MiniShop3

Создавайте скидки для товаров, категорий и пользователей без сложных PHP-условий и ручного программирования. Настройте, кому, на какие товары, при каких условиях и какую скидку предоставить — остальное компонент рассчитает автоматически.

ms3Discounts использует нативную архитектуру MiniShop3 и современный интерфейс на VueTools + PrimeVue. Правила создаются в визуальном конструкторе, а сложные сценарии можно расширять собственными условиями и действиями.

Возможности

  • Скидки на конкретные товары, категории и производителей.
  • Скидки для групп пользователей и отдельных пользователей.
  • Условия по товарам, категориям, производителям, опциям и значениям опций.
  • Минимальная сумма корзины или сумма только подходящих под скидку товаров.
  • Условия по количеству товаров и позиций.
  • Скидки на N-й товар или позицию.
  • Подарочные товары с автоматическим добавлением и удалением.
  • Исключения товаров, категорий и других объектов.
  • Расписание по датам, времени и дням недели.
  • Ограничение по контекстам.
  • Приоритеты и несколько одновременно подходящих скидок.
  • Визуальный конструктор условий с AND / OR.
  • Предпросмотр и диагностика расчёта скидки.
  • Массовое управление и дублирование скидок.
  • Расширение собственными условиями и действиями.

5 типов скидки

  • Процентная — например, -10%.
  • Фиксированная — например, -500 ₽.
  • Фиксированная цена — например, установить цену 999 ₽.
  • N-й товар — скидка на каждый второй, третий и следующий товар.
  • Подарок — автоматическое добавление бесплатного товара.

Гибкие условия без программирования

Условия собираются визуально и объединяются через AND / OR.

Категория = «Обувь»
И группа пользователя = «Оптовики»
И сумма подходящих товаров >= 20 000 ₽

Можно создавать простые правила в несколько кликов и постепенно добавлять дополнительные условия, не усложняя интерфейс.

Сумма именно подходящих товаров

Можно проверять не только всю корзину, но и сумму товаров, которые попадают под конкретную скидку.

Категория «Чай» → сумма подходящих товаров от 10 000 ₽ → дополнительная скидка 5%

Другие товары в корзине при этом не участвуют в расчёте этого условия.

Исключения

Для каждого правила можно задать включения и исключения.

Например:

Категория «Обувь» → -15%
Исключить производителя «Adidas»

Несколько скидок одновременно

Для управления совместимостью используются четыре режима:

  • Stackable — скидка может применяться вместе с другими.
  • Best — выбирается наиболее выгодная скидка.
  • Exclusive — скидка применяется отдельно от остальных.
  • Fallback — используется, если другие правила не дали результата.

Для каждой скидки также задаётся приоритет.

Скидка должна не только подходить, но и реально примениться

ms3Discounts различает:

eligible — условия скидки выполнены;

applied — скидка действительно изменила цену.

Это важно при нескольких правилах и ограничениях, когда подходящая скидка может не дать фактической выгоды.

Акции по расписанию

Для каждой скидки можно указать:

  • дату начала;
  • дату окончания;
  • время начала и окончания;
  • дни недели;
  • контексты.

Например:

Каждую пятницу с 18:00 до 23:59 — скидка 20% на категорию «Пицца».

N-й товар и подарки

Можно реализовать:

  • каждый второй товар со скидкой;
  • скидку на N-ю позицию;
  • «купи 2 — третий бесплатно»;
  • автоматическое добавление подарка;
  • автоматическое удаление подарка при потере условий акции.

Подарок не должен самостоятельно становиться причиной выполнения условия акции.

Проверка скидки

Если правило не работает так, как ожидалось, не нужно разбираться в коде.

Встроенная диагностика показывает:

  • какие условия выполнены;
  • какое условие не выполнено;
  • какие товары подходят;
  • какая скидка выбрана;
  • какой размер скидки рассчитан;
  • была ли скидка реально применена.

Можно проверить конкретный сценарий, указав пользователя, товар, количество, опции и контекст.

Удобное управление в менеджере

В интерфейсе доступны:

  • список всех скидок;
  • поиск и фильтрация;
  • быстрое включение и отключение;
  • массовые действия;
  • изменение приоритета;
  • дублирование существующего правила;
  • визуальный Rule Builder;
  • предпросмотр;
  • Trace и диагностика расчёта.

Интеграция с MiniShop3

ms3Discounts работает с механизмами расчёта MiniShop3 и автоматически пересчитывает скидки при изменении корзины, количества или параметров товара.

Размер скидки и данные о применённых правилах доступны в позициях корзины и заказа.

Скидки в каталоге и карточке товара

Компонент позволяет получать данные о действующих скидках и использовать их в собственных шаблонах.

Доступны данные о:

  • исходной цене;
  • цене после скидки;
  • размере скидки;
  • проценте скидки;
  • применённых правилах.

Для разработчиков

ms3Discounts можно использовать не только через manager UI, но и как расширяемый движок скидок.

Архитектура позволяет добавлять собственные:

  • условия;
  • действия;
  • провайдеры;
  • интеграции с другими дополнениями.

Например, стороннее дополнение может добавить собственное условие или действие, не изменяя код ms3Discounts.

Современный интерфейс

Manager UI построен на VueTools + Vue 3 + PrimeVue 4 и использует общий стек MiniShop3.

Важно

ms3Discounts отвечает именно за скидки и правила их расчёта.

Промокоды, генерация кодов и управление их использованием не дублируются внутри компонента и могут работать через отдельное дополнение.

Примеры акций

Категория «Обувь» → -10%

Группа «Оптовики» → -15%

Категория «Чай» → от 10 000 ₽ → дополнительная скидка 5%

Каждую пятницу с 18:00 → -20%

Каждый второй товар → -30%

При покупке двух товаров → третий товар в подарок

ms3Discounts — единая система скидок для MiniShop3: визуальные правила, гибкие условия, несколько типов скидок, подарки, N-й товар и встроенная диагностика расчёта.

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.0.0-pl] - 2026-09-26

Fixed

  • ms3discountsGetDiscount as an msProducts prepareSnippet: the snippet reads product fields from the nested row key that pdoTools passes. Sale fields (sale_id, percent, base_price, discount, remains, date_end) now merge into product rows. The msProducts config no longer leaks into the row.
  • Install resolver: a drop-in already linked by a dev symlink is skipped with an info message instead of a copy error. The resolver replaces a symlink that points elsewhere with a file copy.
  • Encryption resolver: the build script can install the package in the same PHP process. The resolver skips loading EncryptedVehicle when the class is already declared, instead of failing with "Cannot redeclare class".

Added

  • Discount rows in ms3_discounts and targets in ms3_discount_targets (Phinx). Actions: percent, fixed, fixed_price, nth, gift.
  • Policies: stackable, best, exclusive, fallback. Targets: product, category, vendor (include or exclude).
  • Schedule fields: date_start / date_end, time_start / time_end, weekdays, contexts. Flags: activation_required, show_in_catalog, show_in_product.
  • Manager CMP (Vue 3, PrimeVue): overview, list, filters, preview, option lookup from MiniShop3.
  • Boot lexicon (MgrLexicon) for the manager CMP. Vue reads strings through VueTools @vuetools/useLexicon.
  • Manager API at /api/mgr/ms3discounts. Permissions: ms3discounts_view, ms3discounts_manage, ms3discounts_delete, ms3discounts_debug. Policy ms3DiscountsManagerPolicy.
  • Cart plugin: msOnAddToCart, msOnChangeInCart, msOnRemoveFromCart, msOnBeforeGetOrderCost recalculate the MiniShop3 draft. msOnGetProductPrice previews one product. msOnGetStatusCart sums properties.discount_cost into total_discount.
  • Gift line with ms3discounts_gift. Line properties: original_price, discount_price, discount_cost, discount_percent, discounts[], ms3discounts_hash.
  • Storefront snippets: ms3discounts, ms3discountsGetDiscount, ms3discountsBuyNow. Fenom chunks: tpl.ms3discounts.list, tpl.ms3discounts.get, tpl.ms3discounts.buynow.row.
  • System event ms3discountsOnRegisterProviders for extra condition and action providers.
  • MiniShop3 drop-ins: core/config/ms3.services.d/50-ms3discounts.php and core/config/ms3.routes.d/manager/50-ms3discounts.php.
  • Russian and English lexicon for the manager Vue UI.
  • Phinx migration and transport package.

Notes

  • Promocodes are not in this package.
  • MiniShop3 cart events pass controller, not draft. The plugin reads the order through controller->getDraft() and reloads it from the database before write.
  • The plugin does not write cart['discounts']. It does not change delivery or payment.
  • Uninstall removes the drop-ins and keeps ms3_discounts / ms3_discount_targets.
  • The manager UI build (assets/.../vue-dist/) is not in git. make gate and make build run npm run build.

Последние обсуждения в сообществе MODX.pro