[Discontrol] - Контроль скидок магазина
Система скидок для магазинов* на MODX Revolution

* Система скидок позволяет работать с любым магазином на MODX Revolution. Действующая версия содержит обработчики только для магазина [miniShop2]
Скидки на продукт
Приложения >> Контроль скидок >> Вкладка «Скидки на Продукт».
Панель управления скидками на продукт.
Доступно:

Окно редактирования скидки на продукт.

Расчет скидки на продукт.
В зависимости от условий задания скидки, полученных опций продукта, для каждого продукта по группе пользователя
формируется массив скидок вида:
Для расчета скидки используется настройка product_option_expression вида:
скидок. Записывается в переменную groups и для расчета итоговой скидки используется настройка
product_group_expression вида:
Пример задания скидки на продукт.
Постановка на скидку оптовикам:
Приложения >> Контроль скидок >> Вкладка «Скидки на Заказ».
Панель управления скидками на заказ.
Доступно:

Окно редактирования скидки на заказ.

Расчет скидки на заказ.
В зависимости от условий задания скидки, полученных опций заказа, для каждого заказа по группе пользователя
формируется массив скидок вида:
Для расчета скидки используется настройка order_option_expression вида:
скидок. Записывается в переменную groups и для расчета итоговой скидки используется настройка
order_group_expression вида:
Пример задания скидки на заказ.
Постановка на скидку оптовикам:
Приложения >> Контроль скидок >> Вкладка «Сравнение».
Панель управления сравнениями опций.
Доступно:

Окно редактирования сравнения опций.

Расчет сравнения опций.
Для сравнения применяется заданное выражение. Доступные переменные:
скидок или же сравнение ложно — скидка не вычисляется.
При сравнении учитывается заданный тип данных, доступны string, integer, float.
Так же вы можете составить свое собственное сравнение с использованием дополнительных переменных заданных через
параметр переменные (json строка)*.
Операторы сравнения.
Доступные операторы:
Системные настройки >> discontrol
Раздел «Основные» настройки.


Приложения >> Контроль скидок >> Вкладка «Скидки на Продукт» >> Вкладка «Проверка»
Приложения >> Контроль скидок >> Вкладка «Скидки на Продукт» >> Вкладка «Проверка»
Проверка скидок.
Для продуктов и заказав реализована панель проверки скидок.


Проверить величину скидки незарегистрированного пользователя на «продукт 1»
Задаем следующие параметры:
[x] пользователь Нет
[x] продукт «продукт 1»
В окне расчета появится лог расчета скидки на продукт.
Проверить величину скидки незарегистрированного пользователя на «заказ» при сумме покупок 5500 у.е.
Задаем следующие параметры:
[x] пользователь Нет
[x] магазин «miniShop2»
[x] переменные
Скидки — Сниппет dcDiscounts
Сниппет dcDiscounts для информирования покупателей о полученных и возможных скидках.

Параметры сниппета:
Постановка на скидку:
— Геозависимые скидки на продукт магазина
— Скидка по времени суток

* Система скидок позволяет работать с любым магазином на MODX Revolution. Действующая версия содержит обработчики только для магазина [miniShop2]
Скидки на продукт
Приложения >> Контроль скидок >> Вкладка «Скидки на Продукт».
Панель управления скидками на продукт.
Доступно:
- сортировка по группе пользователя
- сортировка по классу опций продукта
- поиск по описанию, классу, ключу, значению

Окно редактирования скидки на продукт.
- группа пользователя
- класс опции продукта
- ключ опции продукта
- значение опции продукта
- сравнение
- скидка продукта
- условие
- описание

Расчет скидки на продукт.
В зависимости от условий задания скидки, полученных опций продукта, для каждого продукта по группе пользователя
формируется массив скидок вида:
[msProductData] = array(
0 => 10,
1 => 35,
2 => 20
)
[msVendor] = array(
0 => 16
)
[msProductOption] = array(
0 => 50,
1 => 10
)Где ключ массива — класс опции продукта, а значения — возможные скидки на продукт.Для расчета скидки используется настройка product_option_expression вида:
max~$msProductOption + max~$msProductData + max~$msVendorв данном случае рузультат общей скидки по группе пользователя на продукт представляет из себя сумму максимальныхскидок. Записывается в переменную groups и для расчета итоговой скидки используется настройка
product_group_expression вида:
max~$groupsИтоговая скидка на продукт равна максимальной скидке на продукт по группам пользователя.Пример задания скидки на продукт.
Постановка на скидку оптовикам:
- дать скидку на продукты бренда «adidas» 10%
Создаем скидку с параметрами:
[x] группа Оптовики
[x] класс msVendor
[x] ключ name
[x] значение adidas
[x] скидка 10%
[x] сравнение (string) — Равно
- дать скидку на все продукты нового поступления скидку 5%
Создаем скидку с параметрами:
[x] группа Оптовики
[x] класс msProductData
[x] ключ new
[x] значение 1
[x] скидка 5%
[x] сравнение (integer) — Равно
- дать скидку на все продукты стоимостью более «3 000 руб.» 10%
Создаем скидку с параметрами:
[x] группа Оптовики
[x] класс msProductData
[x] ключ price
[x] значение 3000
[x] скидка 10%
[x] сравнение (float) — Больше
- дать скидку на все продукты c цветом «белый» 5%
Создаем скидку с параметрами:
[x] группа Оптовики
[x] класс msProductOption
[x] ключ value
[x] значение белый
[x] скидка 5%
[x] сравнение (string) — Равно
[x] условие {«key»:«color»}
- дать скидку на продукты категории «ботинки», «штиблеты» 100 у.е.
Создаем скидку с параметрами:
[x] группа Оптовики
[x] класс modResource
[x] ключ parent
[x] значение [11,12] — где 11,12 id нужных нам категорий
[x] скидка 100
[x] сравнение (mixed) — Присутствует
Приложения >> Контроль скидок >> Вкладка «Скидки на Заказ».
Панель управления скидками на заказ.
Доступно:
- сортировка по группе пользователя
- сортировка по классу опций заказа
- поиск по описанию, классу, ключу, значению

Окно редактирования скидки на заказ.
- группа пользователя
- класс опции заказа
- ключ опции заказа
- значение опции заказа
- сравнение
- скидка заказа
- условие
- описание

Расчет скидки на заказ.
В зависимости от условий задания скидки, полученных опций заказа, для каждого заказа по группе пользователя
формируется массив скидок вида:
[msSessionCart] = array(
0 => 100,
1 => 350,
2 => 200
)
[msCustomerProfile] = array(
0 => 160
)
[msOrder] = array(
0 => 500,
1 => 100
)Где ключ массива — класс опции заказа, а значения — возможные скидки на заказ.Для расчета скидки используется настройка order_option_expression вида:
max~$msSessionCart + max~$msCustomerProfile + max~$msOrderв данном случае рузультат общей скидки по группе пользователя на заказ представляет из себя сумму максимальныхскидок. Записывается в переменную groups и для расчета итоговой скидки используется настройка
order_group_expression вида:
max~$groupsИтоговая скидка на заказ равна максимальной скидке на заказ по группам пользователя.Пример задания скидки на заказ.
Постановка на скидку оптовикам:
- дать скидку на заказ при сумме в корзине больше «20 000 руб.» 10%
Создаем скидку с параметрами:
[x] группа Оптовики
[x] класс msSessionCart
[x] ключ total_cost
[x] значение 20000
[x] скидка 10%
[x] сравнение (float) — Больше
- дать скидку на заказ при кол-ве в корзине товаров больше «20 шт.» 10%
Создаем скидку с параметрами:
[x] группа Оптовики
[x] класс msSessionCart
[x] ключ total_count
[x] значение 20
[x] скидка 10%
[x] сравнение (float) — Больше
- дать скидку на заказ при наличии ранее покупок на сумму свыше «50 000 руб.» 20%
Создаем скидку с параметрами:
[x] группа Оптовики
[x] класс msCustomerProfile
[x] ключ spent
[x] значение 50000
[x] скидка 20%
[x] сравнение (float) — Больше
- дать скидку на заказ при наличии заказов оплаченных ранее через «Яндекс Кассу» 5%
Создаем скидку с параметрами:
[x] группа Оптовики
[x] класс msOrder
[x] ключ delivery
[x] значение 2
[x] скидка 5%
[x] сравнение (integer) — Равно
[x] условие {«status»:2}
Приложения >> Контроль скидок >> Вкладка «Сравнение».
Панель управления сравнениями опций.
Доступно:
- поиск по описанию, названию

Окно редактирования сравнения опций.
- имя сравнения
- тип значений сравнения
- выражения сравнения
- переменные
- описание

Расчет сравнения опций.
Для сравнения применяется заданное выражение. Доступные переменные:
- c — значение полученной опции
- v — значение заданное для сравнения
скидок или же сравнение ложно — скидка не вычисляется.
При сравнении учитывается заданный тип данных, доступны string, integer, float.
Так же вы можете составить свое собственное сравнение с использованием дополнительных переменных заданных через
параметр переменные (json строка)*.
Операторы сравнения.
Доступные операторы:
- + сложение
- - вычитание
- * умножение
- / деление
- = равно
- != не равно
- < меньше
- > больше
- in присутствует в массиве
- !in не присутствует в массиве
- min~ наименьшее значение
- max~ наибольшее значение
- sum~ сумма значений
- shift~ первое значение
- pop~ последнее значение
- rand~ рандомное значение
Системные настройки >> discontrol
Раздел «Основные» настройки.

- product_classes классы продукта
Список классов продукта через запятую.
По умолчанию доступно modResource,msProductData,msVendor,msProductOption,msSessionCar
- order_classes классы заказа
Список классов заказ через запятую.
По умолчанию доступно msCustomerProfile,msOrder,msSessionCart

- allow_zero_price разрешить нулевую стоимость продукта
Разрешить нулевую стоимость продукта в результате скидки.
- allow_zero_cost разрешить нулевую стоимость заказа
Разрешить нулевую стоимость заказа в результате скидки.
- product_option_expression выражение расчета скидки по опциям продукта
Результат скидки будет помещен в массив groups.
По умолчанию max~$msProductOption + max~$msProductData + max~$msVendor — сумма максимальных скидок.
- product_group_expression выражение расчета скидки по группе пользователя
Результат скидки является окончательным.
По умолчанию max~$groups — максимальное значение из возможных.
- order_option_expression выражение расчета скидки по опциям заказа
Результат скидки будет помещен в массив groups.
По умолчанию max~$msSessionCart + max~$msCustomerProfile + max~$msOrder — сумма максимальных скидок.
- order_group_expression выражение расчета скидки по группе пользователя
Результат скидки является окончательным.
По умолчанию max~$groups — максимальное значение из возможных.
Приложения >> Контроль скидок >> Вкладка «Скидки на Продукт» >> Вкладка «Проверка»
Приложения >> Контроль скидок >> Вкладка «Скидки на Продукт» >> Вкладка «Проверка»
Проверка скидок.
Для продуктов и заказав реализована панель проверки скидок.


Доступно:
- выбор пользователя
- выбор продукта
- выбор магазина
- переменные
* выражение расчета скидки по опции
* выражение расчета скидки по группе
* дополнительные переменные
Можно указать в виде json строки с указанием класса скидки, ключа и значенияПример проверки скидки на продукт.Проверить величину скидки незарегистрированного пользователя на «продукт 1»
Задаем следующие параметры:
[x] пользователь Нет
[x] продукт «продукт 1»
В окне расчета появится лог расчета скидки на продукт.
[user:groups] [0]
[discounts] [{"msProductData":["5"]}]
[option:expression] max~$modResource + max~$msProductOption + max~$msProductData + max~$msVendor +
max~$msSessionCart
[group:discounts] [5]
[group:expression] max~$groups
[price:evaluate] 50
[discount:evaluate] 5
[newprice:evaluate] 45Расшифровка лога расчета:- [user:groups] группы пользователя
получена группа 0[user:groups] [0]
- [discounts] скидки продукта по опциям
для данного продукта действует скидка 5 у.е. по классу msProductData[discounts] [{"msProductData":["5"]}]
- [option:expression] выражение для расчета скидки по опциям
дефолтное значение для расчета скидки, равно сумме всех максимальных значений по опциям продукта[option:expression] max~$modResource + max~$msProductOption + max~$msProductData + max~$msVendor + max~$msSessionCart
- [group:discounts] скидки продукта по группам
получена скидка 5 у.е.[group:discounts] [5]
- [group:expression] выражение для расчета скидки по группам
максимальное значение из возможных[group:expression] max~$groups
- [price:evaluate] стоимость продукта
получена стоимость продукта 50 у.е.price:evaluate] 50
- [discount:evaluate] скидка продукта
получена скидка продукта 5 у.е.[discount:evaluate] 5
- [newprice:evaluate] новая стоимость продукта
получена новая стоимость продукта 45 у.е.[newprice:evaluate] 45
Проверить величину скидки незарегистрированного пользователя на «заказ» при сумме покупок 5500 у.е.
Задаем следующие параметры:
[x] пользователь Нет
[x] магазин «miniShop2»
[x] переменные
{"msSessionCart":{"total_cost":5500},"cost":5500}В окне расчета появится лог расчета скидки на заказ.[user:groups] [0]
[discounts] [{"msSessionCart":["60"]}]
[option:expression] max~$msCustomerProfile + max~$msOrder + max~$msSessionCart
[group:discounts] [60]
[group:expression] max~$groups
[cost:evaluate] 5500
[discount:evaluate] 60
[newcost:evaluate] 5440Расшифровка лога расчета:- [user:groups] группы пользователя
получена группа 0[user:groups] [0]
- [discounts] скидки продукта по опциям
для данного заказа действует скидка 60 у.е. по классу msSessionCart[discounts] [{"msSessionCart":["60"]}]
- [option:expression] выражение для расчета скидки по опциям
дефолтное значение для расчета скидки, равно сумме всех максимальных значений по опциям заказа[option:expression] max~$msCustomerProfile + max~$msOrder + max~$msSessionCart
- [group:discounts] скидки продукта по группам
получена скидка 60 у.е.[group:discounts] [60]
- [group:expression] выражение для расчета скидки по группам
максимальное значение из возможных[group:expression] max~$groups
- [cost:evaluate] 5500 стоимость заказа
получена стоимость заказа 5500 у.е.[cost:evaluate] 5500
- [discount:evaluate] скидка заказа
получена скидка заказа 60 у.е.[discount:evaluate] 60
- [newcost:evaluate] новая стоимость заказа
получена новая стоимость заказа 5440 у.е.[newcost:evaluate] 5440
Скидки — Сниппет dcDiscounts
Сниппет dcDiscounts для информирования покупателей о полученных и возможных скидках.

Параметры сниппета:
- object — объект получения информации о скидке
доступно msProduct и msOrder
по умолчанию msOrder
- class — класс получения информации о скидке
по умолчанию msSessionCart
- key — ключ получения информации о скидке
по умолчанию total_cost
- comparison — сравнение
вывод либо полученных скидок (true), либо возможных (false)
по умолчанию true
- type — тип данных расчета
доступно string, integer, float, mixed
по умолчанию float
- expression — выражение подсчета
в сниппете доступны следующие переменные:
по умолчанию $c — $v* v - значение указанное в скидке * c - значение полученное по указанному ключу * p - значение стоимости (продукта/ заказа) * d - значение скидки (продукта/ заказа)
- tplRow — чанк вывода информации о скидке
по умолчанию
@INLINE <div class="[[+comparison]]">[[+data.discount]] - [[+data.calc]]</div> - tplOuter — чанк обертки
по умолчанию
@INLINE <div>[[%discontrol_[[+object]]]] [[%discontrol_comparison_[[+comparison]]]]: <div class="discontrol-discounts [[+selector]]" data-propkey="[[+propkey]]">[[+output]]</div> </div> - tplEmpty — чанк вывода информации об отсутствии скидок
по умолчанию
@INLINE <div>No discounts</div> - frontendCss — Файл с css стилями для подключения на фронтенд
- frontendJs — Файл с javascript для подключения на фронтенде
- selector — Имя CSS класса, который будет использован как jQuery селектор для инициализации
- limit — Лимит выборки результатов
- showLog — Вывод информации о работе сниппета в лог MODX
Постановка на скидку:
- скидка на продукт 4% при общей сумме заказа более 4000 у.е
- скидка на продукт 7% при общей сумме заказа более 20000 у.е
[[!dcDiscounts?
&object=`msProduct`
&comparison=`1`
&expression=`$d`
]]Вывод информации о возможных скидках на странице продукта[[!dcDiscounts?
&object=`msProduct`
&comparison=`0`
&expression=`$v - $c`
]]p.s. Всем спасибо за внимание.— Геозависимые скидки на продукт магазина
— Скидка по времени суток
Комментарии: 74
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
— улучшен сниппет подсчета скидок
— добавлен класс «msSessionOrder»
теперь можно делать скидки на заказ в зависимости от свойств заказа. Например можно сделать скидку на определенный вид доставки, способ оплаты и тд… хоть скидку в зависимости от комментария к заказу.
все это делается просто в админке без танцев с бубном.
указываем в настройке пакета discontrol_product_classes класс modUser
указываем в настройке пакета discontrol_product_option_expression класс $modUser
создаем сравнение
выражение для сравнения
создаем скидку
указываем кол-во дней и скидку
все!
Есть скидки на заказ в корзине, например больше 9 штук скидка 20%
Теперь нужно указать скидки на отдельные товары
И получается наложение скидок, т.е. на товар с id 21 имеется скидка 20% и если набрать их 10 штук то накладывается скидка на заказ, чего не должно быть.
как так делается?
только в отдельном блоке с помощью dcDiscounts
Проблема в том что никак не пойму как определить по товару к какой акции он относится. Нашел такой метод getProductAllDiscounts, но он возвращает лишь разницу в цене.
Можно ли как-то узнать акцию по товару?
Подумаю что можно сделать.
При покупки 3 любых товаров(даже одних и техже, к примеру один товар — 3шт) из конкретной рубрики, их цена становиться меньше… для каждого товара указать новую цену, к примеру было по 380 каждый, а стало 300
Из коробки такого нет.
Можно написать свой класс в который заложить нужную логику.
Вы подразумеваете под покупкой добавление продукта в корзину? или же покупку — создание заказа и последующую оплату.
Т.е. скидка действует только на диапазон от 10 000 до 20 000.
Это возможно?
Еще вопрос один…
Скидка на заказ при сумме в корзине больше «20 000 руб.» 10%
[x] класс msSessionCart
[x] ключ total_cost
[x] значение 20000
[x] скидка 10%
[x] сравнение (float) — Больше
Но total_cost — это вместе с доставкой, а как сделать, чтобы скидка был и на сумму без доставки? На cost.
Пробовала так
[x] класс msOrder
[x] ключ сost
[x] значение 20000
[x] скидка 10%
[x] сравнение (float) — Больше
Но скидка вообще не присваивается.
эти поля. Можно расширить класс корзины и добавить туда необходимое поле стоимости корзины без доставки. Только так.
Хочу вывести в заказе, какая скидка присвоена на заказ.
Но у меня их две от 10 000 и от 20 000
Заказываю на 25 000 и вижу надпись
Как только нужную?
Спасибо!
Скидка первая должна быть только если на 10 000 купил. А она в корзине на любую сумму заказа присваивается.
Только заказчик не будет покупать компонент, если в нем что-то не работает.
Попробую убедить.
Вызываю сниппет dcProductDiscount в чанке tpl.mSearch2.row — результат не отображается.
При вызове чанка dcDiscounts без указания значений &class отображается пустой шаболон: «Скидка на продукт получена: No discounts „
Если указать значения, то это приводит к 500 ошибки
Спасибо!
Установил компонент.
Настроил скидку на все товары в 25%. Скидка срабатывает, но почему-то не у всех товаров показывает старую цену при добавлении в корзину.
Пытался понять, по какому признаку так происходит, но не удалось. Причем это происходит у товаров с ценной больше 7 000 рублей
По вопросам работы платных дополнений следует писать в ТП
В сообщении указываете доступ к админке сайта и ссылку на проблемное место.
Спасибо!
Приложение — Discontrol
Если вам нужно задать какие то отдельные условия используйте поле условие, например
скидка для всех кроме бренда adidas
Дано:
[x] класс msSessionCart
[x] ключ total_cost
[x] значение 3000
[x] скидка 3%
[x] сравнение (float) — Больше
Для того чтобы эта скидка применялась в промежутке от 3000 до 5000, ставлю условие
А как например не применять эту скидку если в корзине товара на 3500, но у пользователя стоит в профиле комментарий notsale?
Пробовал по логике так, не получается оба варианта
и
ps. по вопросам работы платных дополнений пишите в ТП, спасибо!
1. от суммы заказа
2. Дать скидку на заказ при наличии ранее покупок на сумму свыше «10 000 руб.» 7%
В итоге, если я новый клиент, то я на любой свой заказ получу скидку, если сумма превысит хоть одно из условий в пункте 1
Если я постоянный клиент и имею сумму ранее оформленных заказов свыше 10 000, и в текущей сессии я набрал >25000, то по логике мне должна примениться скидка из пункте 1 и ее размер должен составить 10%
p/s/ Правильно ли вообще использовать такой вывод:
Подскажи, смогу я дать скидку определенному товару 10% первым 10-и покупателям!?
Спасибо!
В таблице [префикс]_discontrol_product_discounts столбец value имеет массив плюс столбец active = 1.
Как это все вытащить в msProducts например?
удалось решить? тоже столкнулся…
Направьте, пожалуйста, ссылку на тикет — посмотрю.
Даже если появляются новые фишки и ошибки у модуля нельзя сообщить об ошибке автору.
Да, возможность сигнализировать об идеях, предложениях и ошибках у нас в очереди доработок в Modstore.
P. S. Внимание автора обратим на ваш комментарий.
ошибка в {$data.discount|round}%
предположу, что вам следует проверить «системные настройки», core, по фильтру «fenom»,
разрешить «Fenom в чанках» и тому подобное. Др. идей нет.
Я прописал так, но не сработало
prntscr.com/mpe2dw
joxi.ru/8AnNWLnTjYv9ZA
если в корзине больше трех товаров — то стоимость доставки становится равной нулю. Т е бесплатная доставка если в корзине больше трех товаров
делаю так
[x] класс msSessionOrder
[x] ключ deliveryType
[x] значение 1
[x] скидка 15%
[x] сравнение (float) — Равно
значение 1 это способ доставки с id=1
или что то не так делаю
Пока безуспешно.
Разработчик модуля, пишет пустые отписки из разряда, все работает, как правильно настроить думайте сами, я же не знаю что вы конкретно хотите, возможностей много.
клевета.
что я делаю не так?
Только ключ должен быть delivery, а значение это id.
Единственное у меня не получилось еще привязать скидку к минимальной сумме заказа, но Владимир, обещал посмотреть в воскресенье что с этим можно сделать.
пример плагина
теперь в классе скидки заказа есть данные о корзине и можно прописать условие по сумме покупок
Подскажите пожалуйста:
1) Какое условие надо прописать для указания даты начала и окончания скидки?
2) Какое условие надо прописать, чтобы скидки не складывались а выводилась максимальная.
Пример:
Создаю акцию на msVendor 50% скидку и она не должна складываться со скидками на товар входящими в этот msVendor. И к тому же если на товар из этого msVendor скидка больше 50% то она не должна понижаться до 50%.
Такое возможно сделать.
Плагин discontrol на событие сохранения заказа меняет сумму заказа без изменения товаров заказа.
Можно ли сделать скидку так, чтобы сумма заказа была равна сумме стоимости товаров?
А то онлайн оплата не работает…
Подскажите, возможно ли сделать бесплатную доставку при стоимости заказа выше 1500руб? Только для определенного вида доставки.
Подскажите, как заставить корректно работать сортировку по цене ?sort=ms|price:asc mFilter2 + Discontrol
Дело в том что mFilter сортирует без учета цен скидки Discontrol
Обновление версии mFilter -miniShop2 -Discontrol не помогло.
На тестовом сервере modx host та же ситуация. Подозреваю, что такой баг у всех кто использует mFilter2 + Discontrol