[msPromoCode] Скидочные промо-коды для miniShop2
- Полная AJAX обработка применения/удаления купона к заказу.
- Промо-код можно добавить не только с основной страницы бекенда. На странице товара также есть вкладка "Промо-коды", при добавлении кода из которой текущий товар сразу привяжется к этому промо-коду. Это очень удобно, когда надо добавить купон только для одного товара.
- Если к купону не привязано ниодного товара или раздела — купон действует на весь магазин.
- Скидку можно указать, как для купона в целом, так и для товара или раздела, привязанного к купону. При этом, чем индивидуальнее будет указана скидка, тем она первостепеннее будет восприниматься компонентом. К примеру, у нас есть купон со скидкой 20%, есть Раздел 1, привязанный к этому купону, со скидкой 80% и есть товар лежащий в Разделе 1, привязанный к этому купону, со скидкой 40%. Для данного товара скидка будет 40%.
- При отправке заказа, ровно как и при открытии страницы со сниппетом [[!mspcForm]], компонент проверяет, действителен ли ещё купон. Если нет, то сообщает об этом юзеру, удаляет купон из формы и обновляет цены. Это делает невозможным воспользоваться купоном:
а) который был отключён,
б) время действия которого завершилось,
в) количество которого закончилось.
- Если заказ был оформлен с промо-кодом, то в бекенде в модальном окне заказа вверху на первой вкладке появится промо-код и сумма скидки.
- JS на странице вызова сниппета [[!mspcForm]] вызывается в конце страницы для того, чтобы ваши колбеки miniShop2, которые могут пересекаться с используемыми в пакете, были клонированы и успешно выполнены.
Демо-сайт msPromoCode
Пакет можно купить в modstore.pro
Для промо-кода можно указать:
- Код купона. Также его можно сгенерировать встроенным инструментом, указав нечто вроде регулярки:
/([a-zA-Z0-9]{4-10})-([A-Z]{4})/
- Скидку. Как в процентах, так и фиксированную, которая будет применена для каждого товара привязанного к купону.
- Количество. Это позволит ограничить кол-во оформленных заказов с данным купоном. Необязательно.
- Дату начала и окончания. Необязательно.
- Привязать список товаров/разделов, которые будут участвовать в промо-акции. Если не указать — будет действовать на весь магазин.
Вся информация по установке и настройке компонента перенесена в документацию.
Поблагодарить автора
Отправить деньги
Комментарии: 87
Ай, молодец!
С удовольствием выслушаю пожелания по улучшению компонента.
Дополни его привязанным к купону подарком. Например, оператор какой то товар назначает подарком, который рандомно будет кому то подарен в момент погашения купона (варианты: в течении периода, от цены товара и т.п.)
Ну, и конечно, к какому купону привязывается подарок- ни кто не знает. ))
Ну, и конечно, к какому купону привязывается подарок- ни кто не знает. ))
Не совсем понял, если честно. Подробнее бы. :)
Да? Распишу. Чуть позже))
Привет! не дружит с msoptionsprice2, так как берет дефолтную цену продукта из таблички продукта напрямую. Пришлось лезть в исходники, добавлять выборку по модификациям.
Мне кажется, имеет смысл создавать доп. сущность в сессии, чтоб туда записывались цены до промокода, и потом восстанавливались оттуда, а не из таблиц бд… ну или не знаю я)
Мне кажется, имеет смысл создавать доп. сущность в сессии, чтоб туда записывались цены до промокода, и потом восстанавливались оттуда, а не из таблиц бд… ну или не знаю я)
Добрый день Павел, у меня на сайте при выборе одного из купонов — не перекидывает на оплату. Я писал разработчику модуля оплаты — он сказал это к Вам.
Причем по одним купонам — все нормально, а по этому ошибка из-за несовпадении сумм.
Причем по одним купонам — все нормально, а по этому ошибка из-за несовпадении сумм.
Пишите в ТП на Модстор. Сразу доступы приложите пжл. И всю доп инфу (что за купон, что за компонент оплаты и т.п.).
пытался, пишет что прошло больше года после покупки, поэтому не дает отправить сообщение в ТП
Всё, что я написал выше, скиньте мне на почту.
написал в ЛС, почту не нашел.
Отлично! Как раз то, что не хватало именно msdiscount. В идеале бы соединить эти два компонента либо добавить в этот компеонент фунцкционал из мсдискаунт. Отдельный респекст за маску генерирования кода купона. Вопрос такой: можно ли самому будет вписать свой код купона? Если нет, то желательно бы добавить эту возможность. Ждем в магазине этот компонент!
Конечно можно. Без этого данный функционал не мыслю даже. Можно сгенерить по маске, либо самому вписать любой код. Это можно увидеть в демо-версии на странице корзины.
А что именно из msDiscount не хватает тут?
А что именно из msDiscount не хватает тут?
Вписать код в админке, вместо автогенерации)
Не хватает к примеру генерации группы одноразовых купонов (любое количество штук купонов за один клик) которые можно отслеживать какие уже активировали а какие еще нет, ну и их можно скачать файлом для удобства в котором так же экспортируется информация какие активировали а какие еще нет. Так в мсдискаунте, но там как раз не хватает генерации кодов по маске.
Плюсом неплохо было бы видеть в таблице купонов сколько раз их активировали ( многоразовые купоны) а еще лучше какие пользователи активировали и к какому заказу.
Плюсом неплохо было бы видеть в таблице купонов сколько раз их активировали ( многоразовые купоны) а еще лучше какие пользователи активировали и к какому заказу.
Спасибо, приму на заметку всё вышесказанное.
Опубликовал дополнение в Магазине: modstore.pro/packages/ecommerce/mspromocode
Спасибо, Виталий!
Здравствуйте! Подскажите, пожалуйста, возможно ли добавить за оплату следующий функционал?
Указание определенных условий для конкретного многоразового промокода:
— количество товаров в заказе;
— стоимость заказа;
Пример: Скидка 400 грн при заказе двух товаров на общую сумму от 1500 грн.
Указание определенных условий для конкретного многоразового промокода:
— количество товаров в заказе;
— стоимость заказа;
Пример: Скидка 400 грн при заказе двух товаров на общую сумму от 1500 грн.
Да. Напиши в ЛС, я скину свой скайп — обсудим детали.
Вячеслав, хорошее пожелание. Именно этого, иногда не хватает.
Наконец-то дошли руки до реализации условий применения промо-кода. Вот ссылка на пост — modx.pro/components/8405-mspromocode-1-2-0-application-of-coupon/
Если в поле ввода промокода убрать [[+coupon:notempty=`disabled`]], то каждый раз, обновляя страницу корзины можно вводить этот же промокод и каждый раз скидка будет применяться к текущей сумме (то есть можно так себе сделать гораздо бОльшую скидку).
Павел, протестируй, пожалуйста, этот момент, так как это дает потенциальную дыру для «особо умных» покупателей :)
Павел, протестируй, пожалуйста, этот момент, так как это дает потенциальную дыру для «особо умных» покупателей :)
Спасибо за баг-репорт! Проблема устранена, обновляйтесь на версию 1.2.5!
В методе setCurrentCoupon надо бы добавить строчки после первого if:
Ну и в словарь добавить фразу «Этот купон уже был применен»
elseif($_SESSION['mspc']['coupon'] == $code){
$this->mspc->setError($this->modx->lexicon('mspromocode_err_code_applied'), true);
return false;
}
А то получается, даже если купон уже был применен, то мы можем его повторно применять неограниченное количество раз.Ну и в словарь добавить фразу «Этот купон уже был применен»
Реализовал немного по-иному, т.к. в твоём коде есть возможность применить купон с другим кодом и всё прокатит.
Тоже верно, мое решение — 5-минутное. Я когда написал, тоже подумал о том, что можно ввести другой промокод :)
Оперативненько сработал :)
Оперативненько сработал :)
Подскажите, если ли возможность при помощи компонента реализовать промо-ссылки?
Опишите задачу подробнее, пожалуйста.
Имеется магазин. Мы раздаем партнерам ссылки типа «shop.ru/promo.html?code=partner», при этом автоматически применяется скидка по этому коду и происходит редирект в каталог товаров.
А условие применения промо-кода для конкретного юзера не нужно? Если нет, то с помощью данного компонента + плагина/сниппета, выполняющего применение промо-кода и редирект — задача решаема.
Скидка (10%) применяется ко всем товарам без условий. Если есть возможность, напишите как
Если есть возможность, напишите какДля этого необходимо знать PHP. Надо подключить класс компонента в код и использовать метод применения промо-кода. Перед применением, желательно проверить на наличие и активность данного промо-кода.
Единственное, цены на товары вне корзины будут такими же, как и без промо-кода, а в корзине цена будет со скидкой.
Можно ли в письме покупателю, при оформлении заказа, указывать размер скидки и используемый промо-код?
Замечательно! еще вопрос — как работает опция «В данной акции реферальные промо-коды» — нет ли какой-либо документации по данному пункту?
Документация разбросана по сообществу. Каюсь, моя вина. Я обязательно найду в себе силы переписать документацию для каждого своего дополнения, тем более, что у меня есть 2 хороших пакета, которые просто так пролёживают, вместо того, чтобы служить людям.
Подскажите, пожалуйста, как можно программно создавать промокоды?
Из Console как-то так:
$response = $modx->runProcessor('coupon/create', array(
'code' => 'lala',
'discount' => '20%',
'active' => 1,
), array('processors_path' => MODX_CORE_PATH . 'components/mspromocode/processors/mgr/'));
print_r($response->getObject());
Уважаемый разработчик,
Пожалуйста, разъясните ситуацию: есть купон, но в качестве скидки указана абсолютная величина.
Как сделать так чтобы скидка применялась к общей сумме, а не к каждому продукту?
Пожалуйста, разъясните ситуацию: есть купон, но в качестве скидки указана абсолютная величина.
Как сделать так чтобы скидка применялась к общей сумме, а не к каждому продукту?
Нашел ответ в ChangeLog
Такие вопросы лучше задавать в поддержку дополнения в modstore.
Подскажите, пожалуйста, как я могу кнопочку с галочкой(крестиком) изменить?
Спасибо!
Спасибо!
Лексиконы: mspromocode_btn_apply, mspromocode_btn_remove.
Прошу прощения! А для новичка можно подробнее.
Спасибо.
Спасибо.
Разобрался! Большое спасибо!
Вопрос, есть ли возможность использовать один и тот же код купона, но с разными данными и датами?
Пример:
Купон 1 — дата с 10 по 15 число — скидка 20%
Купон 1 — дата с 15 по 20 число — скидка 15 %
Пример:
Купон 1 — дата с 10 по 15 число — скидка 20%
Купон 1 — дата с 15 по 20 число — скидка 15 %
Нет. Только вручную поправить после окончания первой акции.
Демо-сайт не работает (
На любое действие response возвращает array() соответственно не очень удобно пробовать )
Нужно догадаться перезагружать страницу корзины, ну и товар добавился или нет — не видно.
Нужно догадаться перезагружать страницу корзины, ну и товар добавился или нет — не видно.
Поправил.
еще вопросик, можно ли из плагина устанавливать новое значение скидки и чтобы оно пересчитывалось?
Например на событие mspcOnSetProductDiscount или какое-то другое получать значение скидки, переопределять его и чтобы это всё работало :)
Например на событие mspcOnSetProductDiscount или какое-то другое получать значение скидки, переопределять его и чтобы это всё работало :)
Вопросов не имею, разобрался.
Так как разработчик написал, что готов выслушать пожелания по компоненту, то хочу сообщить что не хватает очень важной функции просмотра, сколько же раз был использован каждый промокод. Благодаря этому можно понять что сработало, а что нет.
И второй момент — условия для использования купонов супер, но не хватает условия на товарную категорию.
Если выбран товар из одной категории, то скидка будет на доп товар из другой категории.
В остальном все супер. Спасибо за компонент.
И второй момент — условия для использования купонов супер, но не хватает условия на товарную категорию.
Если выбран товар из одной категории, то скидка будет на доп товар из другой категории.
В остальном все супер. Спасибо за компонент.
Подскажите, а как вывести поле для промокода на странице товара?
[[!mspcForm]]
выводится, только если промокод был применен для корзины с этим товаром…
Никак.
Добрый день Павел!
Возможно ли связать Ваш компонент с PayAndSee от Володи?
Смысл таков что есть подписка на скрытые ресурсы и нужно при покупке подписки по промокоду давать скидку.
Возможно ли связать Ваш компонент с PayAndSee от Володи?
Смысл таков что есть подписка на скрытые ресурсы и нужно при покупке подписки по промокоду давать скидку.
Напишите мне в личку. Я добавил средства связи в профиль — modx.pro/users/pavelgvozdb/
Добрый день.
Подскажите, как создать купон так, что бы его могли применить только незарегистрированные пользователи или пользователи состоящие в группе Users?
Подскажите, как создать купон так, что бы его могли применить только незарегистрированные пользователи или пользователи состоящие в группе Users?
Создаёте такой плагин:
switch ($modx->event->name) {
case 'mspcOnBeforeSetCoupon':
// Если это не купон "all", дальше не проверяем
if ($coupon['code'] != 'all') {
break;
}
// Если в группе Users, то применим купон
if (is_object($modx->user) && $modx->user->isMember('Users')) {
break;
}
// Выдаём ошибку применения купона
$modx->event->output('Не применю купон "' . $coupon['code'] . '"!');
break;
}
Дальше можете под себя его кастомизировать…
Добрый день, есть ли возможность что бы купон действовал на все товары, кроме тех что уже со скидкой (например у товара указана старая цена)? Имеется ввиду купон в корзине, на заказ.
У купона есть настройка
Отлично, спасибо, а то перед покупкой не ясно было)
Добрый день, Павел!
Возник такой вопрос, есть ли в планах и техническая возможность добавить купоны, которые будут работать конкретные часы? Как я понимаю — это можно добавить в раздел «Условия» для промокода… Не подскажите, где эти условия обрабатываются в файлах?
Спасибо :)
Возник такой вопрос, есть ли в планах и техническая возможность добавить купоны, которые будут работать конкретные часы? Как я понимаю — это можно добавить в раздел «Условия» для промокода… Не подскажите, где эти условия обрабатываются в файлах?
Спасибо :)
Что значит «конкретны часы»?
Павел, я имею в виду, промокоды, которые работают только с 10:00 до 12:00, либо с 00:00 по 06:00 каждый день и т.п.
«Счастливые часы», «Обед в шоколаднице» и т.п ситуации :)
«Счастливые часы», «Обед в шоколаднице» и т.п ситуации :)
Ну а откуда брать время? Сервера? Если так, то что делать с юзерами, у которых +-5 часов разницы? А если брать время JSом с компа юзера, то что делать с хитрыми юзерами, которые поменяют часовой пояс на компе?
Ну, в данном случае это же не обязательная функция купона, каждый магазин сам будет решать — хочет он такое или нет :) Другое дело, если эта возможность требует полностью пересмотреть логику компонента, то тогда она может не стоить того.
А по вопросам:
Время можно брать с сервера (конкретно у нас оно верное, встречал сервера с кривыми настройками). Просто можно дать магазину возможность выбирать часовой пояс и ориентироваться исключительно на него.
А по вопросам:
Время можно брать с сервера (конкретно у нас оно верное, встречал сервера с кривыми настройками). Просто можно дать магазину возможность выбирать часовой пояс и ориентироваться исключительно на него.
Вы можете самостоятельно написать для себя плагин с любой логикой проверки. Вот инструкция с примером.
О, на эту статью еще не натыкался, сейчас сидел с другими.
Спасибо, буду так решать :)
Спасибо, буду так решать :)
Павел, можно будет как то вывести в списке товаров, у самого товара его данные:
— промо-код
— размер скидки
— время когда заканчивается его действие
Так же интересует, тоже самое, но уже в карточке товара.
— промо-код
— размер скидки
— время когда заканчивается его действие
Так же интересует, тоже самое, но уже в карточке товара.
Вы все сообщения будете писать на мыло, а через минуту дублировать сюда?
Павел, добрый день! Можно ли настроить однократное использование промокода? Например, чтобы промокод для новых клиентов сгорал после одного использования?
Да. У промо-кода есть настройка «Кол-во». Только не пойму, что за «для новых клиентов»?
Уточню вопрос. На главной странице сайта хотим повесить промокод для новых клиентов. Идея в том, чтобы вы получили скидку на первый заказ. Затем промокод перестаёт действовать. Можно ли это настроить в вашем компоненте или обращаться к разработчику, чтобы он другим образом настроил «уничтожение» промо-кода? Прошу прощения, если коряво формулирую, я не разработчик.
«Один промокод = одно применение» — можно.
«Один промокод = одно применение для конкретного юзера» — кастом.
«Один промокод = одно применение для конкретного юзера» — кастом.
Модуль не плохой, но столкнулись с проблемой, во 1х хотелось бы генерировать промокоды со своим названием казалось бы мелочью, но это очень важно если имеем крупный интернет магазин и работа идет с большой аудиторией. Во 2х столкнулись с проблемой когда стали работать с крупным корпоративным клиентом. Проблема следующая, хотелось бы сделать возможность использовать 1-промокод но несколько раз подряд, в компании работает больше 400 человек, и не совсем удобно генерировать 400 промокодов, понятное дело, что если промокод один его могут использовать «за пределами компании» Но все же это было бы удобно
Всё это есть из коробки…
Приветствую!
Условия акции: при покупке товара1 и товара2 скидка по промокоду на сумму заказа, равная цене товара2.
Такую акцию можно реализовать с помощью данного компонента?
Если да — беру!
Условия акции: при покупке товара1 и товара2 скидка по промокоду на сумму заказа, равная цене товара2.
Такую акцию можно реализовать с помощью данного компонента?
Если да — беру!
Из коробки — нет.
Подскажите, есть ли компоненты, где из коробки будет реализован данный тип акций?
Или везде надо дописывать под себя?
Или везде надо дописывать под себя?
Я не знаю, вряд ли есть.
Понял, спасибо.
Добрый день, компонент в корзине работает, но что делать если корзина вызывается с любой страницы по ajax в модальное окно бутсрапа, в такм случае скрипты не отрабатывают. подскажите как сделать по фэншую, чтобы скрипты отрабатывали.
Написано, что компонент работает на php выше 5.6, но на 8 он не работает. Из-за вот этой строчки в основном классе:
$return .= $symbs{rand(0, $maxpos)};
Это 1087 строка.
Добрый день, есть ли возможность добавить настройку округления цен до рублей в корзине и на товары и на общую сумму корзины после применения скидки?
Пример клиента — цены на сайте округляются до рублей, при использовании промокода появляются копейки. По итогу у некоторых заказов сумма корзины со скидкой и сумма стоимости товаров со скидкой отличаются на 1 копейку. Из-за этой разницы получаем ошибку при оплате в Тинькове.
Пример клиента — цены на сайте округляются до рублей, при использовании промокода появляются копейки. По итогу у некоторых заказов сумма корзины со скидкой и сумма стоимости товаров со скидкой отличаются на 1 копейку. Из-за этой разницы получаем ошибку при оплате в Тинькове.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.