К содержанию

[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})/
  • Скидку. Как в процентах, так и фиксированную, которая будет применена для каждого товара привязанного к купону.
  • Количество. Это позволит ограничить кол-во оформленных заказов с данным купоном. Необязательно.
  • Дату начала и окончания. Необязательно.
  • Привязать список товаров/разделов, которые будут участвовать в промо-акции. Если не указать — будет действовать на весь магазин.

Вся информация по установке и настройке компонента перенесена в документацию.
Павел Гвоздь
Павел Гвоздь
02 января 2016, 04:37
modx.pro
12 551
Поблагодарить автора Отправить деньги
Реклама

Комментарии: 87

Владимир
Владимир Старожил
02 января 2016, 10:31
Ай, молодец!
    Павел Гвоздь
    Павел Гвоздь Эксперт
    02 января 2016, 15:26
    С удовольствием выслушаю пожелания по улучшению компонента.
      Владимир
      Владимир Старожил
      02 января 2016, 16:33
      Дополни его привязанным к купону подарком. Например, оператор какой то товар назначает подарком, который рандомно будет кому то подарен в момент погашения купона (варианты: в течении периода, от цены товара и т.п.)
      Ну, и конечно, к какому купону привязывается подарок- ни кто не знает. ))
        Павел Гвоздь
        Павел Гвоздь Эксперт
        02 января 2016, 16:45
        Не совсем понял, если честно. Подробнее бы. :)
          Владимир
          Владимир Старожил
          02 января 2016, 17:51
          Да? Распишу. Чуть позже))
        mngatoff
        mngatoff Проверенный
        21 декабря 2017, 00:07
        Привет! не дружит с msoptionsprice2, так как берет дефолтную цену продукта из таблички продукта напрямую. Пришлось лезть в исходники, добавлять выборку по модификациям.
        Мне кажется, имеет смысл создавать доп. сущность в сессии, чтоб туда записывались цены до промокода, и потом восстанавливались оттуда, а не из таблиц бд… ну или не знаю я)
          charset
          charset Старожил
          11 октября 2019, 14:06
          Добрый день Павел, у меня на сайте при выборе одного из купонов — не перекидывает на оплату. Я писал разработчику модуля оплаты — он сказал это к Вам.

          Причем по одним купонам — все нормально, а по этому ошибка из-за несовпадении сумм.
            Павел Гвоздь
            Павел Гвоздь Эксперт
            11 октября 2019, 15:17
            Пишите в ТП на Модстор. Сразу доступы приложите пжл. И всю доп инфу (что за купон, что за компонент оплаты и т.п.).
              charset
              charset Старожил
              11 октября 2019, 16:13
              пытался, пишет что прошло больше года после покупки, поэтому не дает отправить сообщение в ТП
                Павел Гвоздь
                Павел Гвоздь Эксперт
                13 октября 2019, 07:35
                Всё, что я написал выше, скиньте мне на почту.
                  charset
                  charset Старожил
                  16 октября 2019, 22:02
                  написал в ЛС, почту не нашел.
          Роман Воропаев (Volk)
          Роман Воропаев (Volk) Проверенный
          02 января 2016, 22:38
          Отлично! Как раз то, что не хватало именно msdiscount. В идеале бы соединить эти два компонента либо добавить в этот компеонент фунцкционал из мсдискаунт. Отдельный респекст за маску генерирования кода купона. Вопрос такой: можно ли самому будет вписать свой код купона? Если нет, то желательно бы добавить эту возможность. Ждем в магазине этот компонент!
            Павел Гвоздь
            Павел Гвоздь Эксперт
            03 января 2016, 00:09
            Конечно можно. Без этого данный функционал не мыслю даже. Можно сгенерить по маске, либо самому вписать любой код. Это можно увидеть в демо-версии на странице корзины.
            А что именно из msDiscount не хватает тут?
              but1head
              but1head Проверенный
              03 января 2016, 03:46
              Вписать код в админке, вместо автогенерации)
                Роман Воропаев (Volk)
                Роман Воропаев (Volk) Проверенный
                03 января 2016, 20:04
                Не хватает к примеру генерации группы одноразовых купонов (любое количество штук купонов за один клик) которые можно отслеживать какие уже активировали а какие еще нет, ну и их можно скачать файлом для удобства в котором так же экспортируется информация какие активировали а какие еще нет. Так в мсдискаунте, но там как раз не хватает генерации кодов по маске.
                Плюсом неплохо было бы видеть в таблице купонов сколько раз их активировали ( многоразовые купоны) а еще лучше какие пользователи активировали и к какому заказу.
                  Павел Гвоздь
                  Павел Гвоздь Эксперт
                  03 января 2016, 21:34
                  Спасибо, приму на заметку всё вышесказанное.
              Виталий
              Виталий Проверенный
              04 января 2016, 14:46
              Опубликовал дополнение в Магазине: modstore.pro/packages/ecommerce/mspromocode
              Viacheslav
              Viacheslav Старожил
              27 января 2016, 17:20
              Здравствуйте! Подскажите, пожалуйста, возможно ли добавить за оплату следующий функционал?
              Указание определенных условий для конкретного многоразового промокода:
              — количество товаров в заказе;
              — стоимость заказа;

              Пример: Скидка 400 грн при заказе двух товаров на общую сумму от 1500 грн.
              Артём Зернов
              Артём Зернов Старожил
              22 сентября 2016, 10:12
              Если в поле ввода промокода убрать [[+coupon:notempty=`disabled`]], то каждый раз, обновляя страницу корзины можно вводить этот же промокод и каждый раз скидка будет применяться к текущей сумме (то есть можно так себе сделать гораздо бОльшую скидку).

              Павел, протестируй, пожалуйста, этот момент, так как это дает потенциальную дыру для «особо умных» покупателей :)
                Павел Гвоздь
                Павел Гвоздь Эксперт
                22 сентября 2016, 15:47
                Спасибо за баг-репорт! Проблема устранена, обновляйтесь на версию 1.2.5!
                Артём Зернов
                Артём Зернов Старожил
                22 сентября 2016, 10:33
                В методе setCurrentCoupon надо бы добавить строчки после первого if:

                elseif($_SESSION['mspc']['coupon'] == $code){
                            $this->mspc->setError($this->modx->lexicon('mspromocode_err_code_applied'), true);
                            return false;
                        }
                А то получается, даже если купон уже был применен, то мы можем его повторно применять неограниченное количество раз.

                Ну и в словарь добавить фразу «Этот купон уже был применен»
                  Павел Гвоздь
                  Павел Гвоздь Эксперт
                  22 сентября 2016, 15:48
                  Реализовал немного по-иному, т.к. в твоём коде есть возможность применить купон с другим кодом и всё прокатит.
                    Артём Зернов
                    Артём Зернов Старожил
                    22 сентября 2016, 15:51
                    Тоже верно, мое решение — 5-минутное. Я когда написал, тоже подумал о том, что можно ввести другой промокод :)
                    Оперативненько сработал :)
                  Rostislav
                  Rostislav Старожил
                  25 октября 2016, 15:33
                  Подскажите, если ли возможность при помощи компонента реализовать промо-ссылки?
                    Павел Гвоздь
                    Павел Гвоздь Эксперт
                    25 октября 2016, 16:02
                    Опишите задачу подробнее, пожалуйста.
                      Rostislav
                      Rostislav Старожил
                      25 октября 2016, 16:05
                      Имеется магазин. Мы раздаем партнерам ссылки типа «shop.ru/promo.html?code=partner», при этом автоматически применяется скидка по этому коду и происходит редирект в каталог товаров.
                        Павел Гвоздь
                        Павел Гвоздь Эксперт
                        25 октября 2016, 16:08
                        А условие применения промо-кода для конкретного юзера не нужно? Если нет, то с помощью данного компонента + плагина/сниппета, выполняющего применение промо-кода и редирект — задача решаема.
                          Rostislav
                          Rostislav Старожил
                          25 октября 2016, 17:37
                          Скидка (10%) применяется ко всем товарам без условий. Если есть возможность, напишите как
                            Павел Гвоздь
                            Павел Гвоздь Эксперт
                            25 октября 2016, 18:47
                            Если есть возможность, напишите как
                            Для этого необходимо знать PHP. Надо подключить класс компонента в код и использовать метод применения промо-кода. Перед применением, желательно проверить на наличие и активность данного промо-кода.
                            Единственное, цены на товары вне корзины будут такими же, как и без промо-кода, а в корзине цена будет со скидкой.
                    Алексей
                    Алексей Проверенный
                    06 января 2017, 10:45
                    Можно ли в письме покупателю, при оформлении заказа, указывать размер скидки и используемый промо-код?
                      Павел Гвоздь
                      Павел Гвоздь Эксперт
                      06 января 2017, 12:21
                        Алексей
                        Алексей Проверенный
                        07 января 2017, 13:39
                        Замечательно! еще вопрос — как работает опция «В данной акции реферальные промо-коды» — нет ли какой-либо документации по данному пункту?
                          Павел Гвоздь
                          Павел Гвоздь Эксперт
                          07 января 2017, 16:07
                          Документация разбросана по сообществу. Каюсь, моя вина. Я обязательно найду в себе силы переписать документацию для каждого своего дополнения, тем более, что у меня есть 2 хороших пакета, которые просто так пролёживают, вместо того, чтобы служить людям.
                            Николаевич
                            Николаевич Старожил
                            16 января 2017, 19:44
                            Подскажите, пожалуйста, как можно программно создавать промокоды?
                              Павел Гвоздь
                              Павел Гвоздь Эксперт
                              16 января 2017, 22:28
                              Из 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());
                      php.run
                      php.run Старожил
                      16 января 2017, 23:03
                      Уважаемый разработчик,

                      Пожалуйста, разъясните ситуацию: есть купон, но в качестве скидки указана абсолютная величина.
                      Как сделать так чтобы скидка применялась к общей сумме, а не к каждому продукту?
                        php.run
                        php.run Старожил
                        16 января 2017, 23:27
                        Нашел ответ в ChangeLog
                          Павел Гвоздь
                          Павел Гвоздь Эксперт
                          17 января 2017, 00:40
                          Такие вопросы лучше задавать в поддержку дополнения в modstore.
                          Дмитрий
                          Дмитрий Старожил
                          28 мая 2017, 15:29
                          Подскажите, пожалуйста, как я могу кнопочку с галочкой(крестиком) изменить?
                          Спасибо!
                            Павел Гвоздь
                            Павел Гвоздь Эксперт
                            28 мая 2017, 22:13
                            Лексиконы: mspromocode_btn_apply, mspromocode_btn_remove.
                              Дмитрий
                              Дмитрий Старожил
                              28 мая 2017, 22:53
                              Прошу прощения! А для новичка можно подробнее.
                              Спасибо.
                                Дмитрий
                                Дмитрий Старожил
                                28 мая 2017, 23:29
                                Разобрался! Большое спасибо!
                              Евгений Webinmd
                              Евгений Webinmd Эксперт
                              26 октября 2017, 11:35
                              Вопрос, есть ли возможность использовать один и тот же код купона, но с разными данными и датами?
                              Пример:
                              Купон 1 — дата с 10 по 15 число — скидка 20%
                              Купон 1 — дата с 15 по 20 число — скидка 15 %

                                Павел Гвоздь
                                Павел Гвоздь Эксперт
                                27 октября 2017, 10:29
                                Нет. Только вручную поправить после окончания первой акции.
                                Алексей Шумаев
                                Алексей Шумаев Проверенный
                                10 ноября 2017, 12:56
                                Демо-сайт не работает (
                                  Павел Гвоздь
                                  Павел Гвоздь Эксперт
                                  10 ноября 2017, 12:59
                                    Алексей Шумаев
                                    Алексей Шумаев Проверенный
                                    10 ноября 2017, 13:04
                                    На любое действие response возвращает array() соответственно не очень удобно пробовать )
                                    Нужно догадаться перезагружать страницу корзины, ну и товар добавился или нет — не видно.
                                Евгений Webinmd
                                Евгений Webinmd Эксперт
                                14 ноября 2017, 17:18
                                еще вопросик, можно ли из плагина устанавливать новое значение скидки и чтобы оно пересчитывалось?
                                Например на событие mspcOnSetProductDiscount или какое-то другое получать значение скидки, переопределять его и чтобы это всё работало :)
                                  Евгений Webinmd
                                  Евгений Webinmd Эксперт
                                  15 ноября 2017, 00:44
                                  Вопросов не имею, разобрался.
                                  parabellum
                                  parabellum Старожил
                                  04 декабря 2017, 18:12
                                  Так как разработчик написал, что готов выслушать пожелания по компоненту, то хочу сообщить что не хватает очень важной функции просмотра, сколько же раз был использован каждый промокод. Благодаря этому можно понять что сработало, а что нет.
                                  И второй момент — условия для использования купонов супер, но не хватает условия на товарную категорию.
                                  Если выбран товар из одной категории, то скидка будет на доп товар из другой категории.

                                  В остальном все супер. Спасибо за компонент.
                                    Владислав
                                    Владислав Старожил
                                    20 декабря 2017, 17:29
                                    Подскажите, а как вывести поле для промокода на странице товара?
                                    [[!mspcForm]]
                                    выводится, только если промокод был применен для корзины с этим товаром…
                                      Павел Гвоздь
                                      Павел Гвоздь Эксперт
                                      20 декабря 2017, 19:58
                                      Никак.
                                        Прохор
                                        Прохор Старожил
                                        29 марта 2018, 17:37
                                        Добрый день Павел!
                                        Возможно ли связать Ваш компонент с PayAndSee от Володи?
                                        Смысл таков что есть подписка на скрытые ресурсы и нужно при покупке подписки по промокоду давать скидку.
                                    Владимир Тельнов
                                    30 июня 2018, 12:56
                                    Добрый день.
                                    Подскажите, как создать купон так, что бы его могли применить только незарегистрированные пользователи или пользователи состоящие в группе Users?
                                      Павел Гвоздь
                                      Павел Гвоздь Эксперт
                                      30 июня 2018, 13:41
                                      Создаёте такой плагин:
                                      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;
                                      }
                                      Дальше можете под себя его кастомизировать…
                                      Андрей
                                      Андрей Старожил
                                      20 сентября 2018, 09:29
                                      Добрый день, есть ли возможность что бы купон действовал на все товары, кроме тех что уже со скидкой (например у товара указана старая цена)? Имеется ввиду купон в корзине, на заказ.
                                        Павел Гвоздь
                                        Павел Гвоздь Эксперт
                                        20 сентября 2018, 10:00
                                        У купона есть настройка
                                          Андрей
                                          Андрей Старожил
                                          20 сентября 2018, 10:03
                                          Отлично, спасибо, а то перед покупкой не ясно было)
                                        Валерий
                                        Валерий Старожил
                                        18 октября 2018, 10:27
                                        Добрый день, Павел!

                                        Возник такой вопрос, есть ли в планах и техническая возможность добавить купоны, которые будут работать конкретные часы? Как я понимаю — это можно добавить в раздел «Условия» для промокода… Не подскажите, где эти условия обрабатываются в файлах?

                                        Спасибо :)
                                          Павел Гвоздь
                                          Павел Гвоздь Эксперт
                                          18 октября 2018, 18:38
                                          Что значит «конкретны часы»?
                                            Валерий
                                            Валерий Старожил
                                            18 октября 2018, 18:41
                                            Павел, я имею в виду, промокоды, которые работают только с 10:00 до 12:00, либо с 00:00 по 06:00 каждый день и т.п.
                                            «Счастливые часы», «Обед в шоколаднице» и т.п ситуации :)
                                              Павел Гвоздь
                                              Павел Гвоздь Эксперт
                                              18 октября 2018, 18:47
                                              Ну а откуда брать время? Сервера? Если так, то что делать с юзерами, у которых +-5 часов разницы? А если брать время JSом с компа юзера, то что делать с хитрыми юзерами, которые поменяют часовой пояс на компе?
                                                Валерий
                                                Валерий Старожил
                                                18 октября 2018, 18:55
                                                Ну, в данном случае это же не обязательная функция купона, каждый магазин сам будет решать — хочет он такое или нет :) Другое дело, если эта возможность требует полностью пересмотреть логику компонента, то тогда она может не стоить того.

                                                А по вопросам:
                                                Время можно брать с сервера (конкретно у нас оно верное, встречал сервера с кривыми настройками). Просто можно дать магазину возможность выбирать часовой пояс и ориентироваться исключительно на него.
                                                  Павел Гвоздь
                                                  Павел Гвоздь Эксперт
                                                  18 октября 2018, 18:58
                                                  Вы можете самостоятельно написать для себя плагин с любой логикой проверки. Вот инструкция с примером.
                                                    Валерий
                                                    Валерий Старожил
                                                    18 октября 2018, 19:10
                                                    О, на эту статью еще не натыкался, сейчас сидел с другими.
                                                    Спасибо, буду так решать :)
                                          Роман
                                          Роман Старожил
                                          07 ноября 2018, 22:16
                                          Павел, можно будет как то вывести в списке товаров, у самого товара его данные:

                                          — промо-код
                                          — размер скидки
                                          — время когда заканчивается его действие



                                          Так же интересует, тоже самое, но уже в карточке товара.
                                            Павел Гвоздь
                                            Павел Гвоздь Эксперт
                                            08 ноября 2018, 06:50
                                            Вы все сообщения будете писать на мыло, а через минуту дублировать сюда?
                                            Андрей
                                            Андрей Старожил
                                            14 апреля 2019, 11:37
                                            Павел, добрый день! Можно ли настроить однократное использование промокода? Например, чтобы промокод для новых клиентов сгорал после одного использования?
                                              Павел Гвоздь
                                              Павел Гвоздь Эксперт
                                              14 апреля 2019, 11:41
                                              Да. У промо-кода есть настройка «Кол-во». Только не пойму, что за «для новых клиентов»?
                                                Андрей
                                                Андрей Старожил
                                                14 апреля 2019, 11:52
                                                Уточню вопрос. На главной странице сайта хотим повесить промокод для новых клиентов. Идея в том, чтобы вы получили скидку на первый заказ. Затем промокод перестаёт действовать. Можно ли это настроить в вашем компоненте или обращаться к разработчику, чтобы он другим образом настроил «уничтожение» промо-кода? Прошу прощения, если коряво формулирую, я не разработчик.
                                                  Павел Гвоздь
                                                  Павел Гвоздь Эксперт
                                                  14 апреля 2019, 11:54
                                                  «Один промокод = одно применение» — можно.
                                                  «Один промокод = одно применение для конкретного юзера» — кастом.
                                              Валерий
                                              Валерий Старожил
                                              16 июня 2019, 10:37
                                              Модуль не плохой, но столкнулись с проблемой, во 1х хотелось бы генерировать промокоды со своим названием казалось бы мелочью, но это очень важно если имеем крупный интернет магазин и работа идет с большой аудиторией. Во 2х столкнулись с проблемой когда стали работать с крупным корпоративным клиентом. Проблема следующая, хотелось бы сделать возможность использовать 1-промокод но несколько раз подряд, в компании работает больше 400 человек, и не совсем удобно генерировать 400 промокодов, понятное дело, что если промокод один его могут использовать «за пределами компании» Но все же это было бы удобно
                                                Павел Гвоздь
                                                Павел Гвоздь Эксперт
                                                16 июня 2019, 13:03
                                                Всё это есть из коробки…
                                                Денис
                                                Денис Старожил
                                                20 июня 2019, 11:50
                                                Приветствую!
                                                Условия акции: при покупке товара1 и товара2 скидка по промокоду на сумму заказа, равная цене товара2.
                                                Такую акцию можно реализовать с помощью данного компонента?
                                                Если да — беру!
                                                  Павел Гвоздь
                                                  Павел Гвоздь Эксперт
                                                  20 июня 2019, 11:54
                                                  Из коробки — нет.
                                                    Денис
                                                    Денис Старожил
                                                    20 июня 2019, 11:57
                                                    Подскажите, есть ли компоненты, где из коробки будет реализован данный тип акций?
                                                    Или везде надо дописывать под себя?
                                                      Павел Гвоздь
                                                      Павел Гвоздь Эксперт
                                                      20 июня 2019, 12:01
                                                      Я не знаю, вряд ли есть.
                                                        Денис
                                                        Денис Старожил
                                                        20 июня 2019, 12:04
                                                        Понял, спасибо.
                                                  Евгений
                                                  Евгений Старожил
                                                  20 марта 2023, 15:15
                                                  Добрый день, компонент в корзине работает, но что делать если корзина вызывается с любой страницы по ajax в модальное окно бутсрапа, в такм случае скрипты не отрабатывают. подскажите как сделать по фэншую, чтобы скрипты отрабатывали.
                                                    Антон
                                                    Антон Проверенный
                                                    26 мая 2023, 14:54
                                                    Написано, что компонент работает на php выше 5.6, но на 8 он не работает. Из-за вот этой строчки в основном классе:
                                                    $return .= $symbs{rand(0, $maxpos)};
                                                    Это 1087 строка.
                                                      Андрей
                                                      Андрей Старожил
                                                      07 ноября 2024, 10:43
                                                      Добрый день, есть ли возможность добавить настройку округления цен до рублей в корзине и на товары и на общую сумму корзины после применения скидки?

                                                      Пример клиента — цены на сайте округляются до рублей, при использовании промокода появляются копейки. По итогу у некоторых заказов сумма корзины со скидкой и сумма стоимости товаров со скидкой отличаются на 1 копейку. Из-за этой разницы получаем ошибку при оплате в Тинькове.
                                                        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                        87