За что люблю битрикс, так за то, что не дает расслабиться и все время держит в тонусе. (с)
В рамках CMS Битрикс существует возможность создавать на основе правил работы с корзиной соответствующие купоны на заказ для привлечения покупателей (не следует путать с купонами скидок на товар, которые создаются на основе скидок на товар. В рамках Битрикс это две разные сущности).
Подробнее про купоны на товары,
Подробнее про правила работы с корзиной.
Окно создания купонов выглядит следующим образом:
и находится в административном разделе, в «Маркетинг\Товарный Маркетинг». Само создание купонов правил работы с корзиной является частью модуля «Интернет-магазин», подробная документация для разработчиков изложена здесь .
Создаваемые купоны, в частности, могут быть трех разных видов действия – многоразовые, на один товар и на один заказ.
Одной из частых проблем с многоразовыми купонами, которой и посвящена настоящая статья, является сохранение ранее введенного кода такого купона в соответствующем поле для ввода (такое происходит в силу работы механизма сессий Битрикс), что может нарушать требования заказчика к графическому оформлению сайта (или ломать логику его работы, если работа некоторых некачественных «решений» некорректно использует многоразовые купоны).
Согласно позиции разработчика Битрикс, такое поведение системы нормально в рамках логики системы (недоступными для повторного использования после оформления заказа становятся только одноразовые купоны), однако может быть исправлено следующим путем:
В рамках модуля Интернет-Магазин существует класс DiscountCouponsManager (документация ), в рамках которого можно автоматизированного проводить операции с купонами, минуя административную часть.
Необходимо осуществить следующие действия:
1. Выбираем место для подключения кода. Разумнее это сделать в рамках обработчика события OnSaleComponentOrderOneStepComplete (Вызывается в компоненте bitrix:sale.order.ajax после создания заказа и всех его параметров, после отправки письма, но до редиректа на страницу с информацией о созданном заказе и оплате заказа), написав соответствующий класс в файле /bitrix/php_interface/init.php (или ином, используемом на вашем проекте для подобных включений).
2.Класс обработчика выглядит следующим образом:
3. В состав кода включаем следующие абстрактные методы класса:
В таком случае разумнее воспользоваться методами DiscountCouponsManager::init(), а затем DiscountCouponsManager::clearApply или тем же DiscountCouponsManager::clear() без дополнительных событий по добавлению купона.
Можно вообще использовать DiscountCouponsManager::init(
где необходимо указать после первый двух третий параметр -
$clearStorage = true); что автоматически очистит ранее введенные купоны.
5. Возможна очистка введенных значений купонов и в рамках других событий, например, при авторизации пользователя или при его заходе на страницу корзину и начале создания заказа, например OnPageStart или OnAfterUserLogin (подробнее).
Рабочий пример кода для очистки введенных многоразовых купонов.
Он должен быть расположен в init.php либо во включаемых файлах к нему.
Подробнее про купоны на товары,
Подробнее про правила работы с корзиной.
Окно создания купонов выглядит следующим образом:
и находится в административном разделе, в «Маркетинг\Товарный Маркетинг». Само создание купонов правил работы с корзиной является частью модуля «Интернет-магазин», подробная документация для разработчиков изложена здесь .
Создаваемые купоны, в частности, могут быть трех разных видов действия – многоразовые, на один товар и на один заказ.
Одной из частых проблем с многоразовыми купонами, которой и посвящена настоящая статья, является сохранение ранее введенного кода такого купона в соответствующем поле для ввода (такое происходит в силу работы механизма сессий Битрикс), что может нарушать требования заказчика к графическому оформлению сайта (или ломать логику его работы, если работа некоторых некачественных «решений» некорректно использует многоразовые купоны).
Согласно позиции разработчика Битрикс, такое поведение системы нормально в рамках логики системы (недоступными для повторного использования после оформления заказа становятся только одноразовые купоны), однако может быть исправлено следующим путем:
В рамках модуля Интернет-Магазин существует класс DiscountCouponsManager (документация ), в рамках которого можно автоматизированного проводить операции с купонами, минуя административную часть.
Необходимо осуществить следующие действия:
1. Выбираем место для подключения кода. Разумнее это сделать в рамках обработчика события OnSaleComponentOrderOneStepComplete (Вызывается в компоненте bitrix:sale.order.ajax после создания заказа и всех его параметров, после отправки письма, но до редиректа на страницу с информацией о созданном заказе и оплате заказа), написав соответствующий класс в файле /bitrix/php_interface/init.php (или ином, используемом на вашем проекте для подобных включений).
2.Класс обработчика выглядит следующим образом:
AddEventHandler("НАЗВАНИЕ МОДУЛЯ", "НАЗВАНИЕ СОБЫТИЯ", Array("НАЗВАНИЕ КЛАССА", "НАЗВАНИЕ МЕТОДА КЛАССА"));
Array("НАЗВАНИЕ КЛАССА", "НАЗВАНИЕ МЕТОДА КЛАССА")); - может быть заменено "НАЗВАНИЕ ФУНКЦИИ");
*НАЗВАНИЕ КЛАССА ИЛИ ФУНКЦИИ*
*КОД*
Подробнее о написании обработчиков событий в битрикс вы можете узнать на официальном сайте 3. В состав кода включаем следующие абстрактные методы класса:
DiscountCouponsManager::init(); //очищаем список купонов для данного хита
DiscountCouponsManager::clear(true); //инициализируем корзину пользователя
$basket = Sale\Basket::loadItemsForFUser(Sale\Fuser::getId(), Bitrix\Main\Context::getCurrent()->getSite()); //применяем купон, должен идти после инициализации корзины, так как иначе купон не будет применен
DiscountCouponsManager::add($coupon);
4.Если логика вашего магазина предусматривает ввод купона на этапе создания заказа – возможно использование методов очистки купона и на событии создания\изменения корзины – OnBeforeBasketAdd.В таком случае разумнее воспользоваться методами DiscountCouponsManager::init(), а затем DiscountCouponsManager::clearApply или тем же DiscountCouponsManager::clear() без дополнительных событий по добавлению купона.
Можно вообще использовать DiscountCouponsManager::init(
где необходимо указать после первый двух третий параметр -
$clearStorage = true); что автоматически очистит ранее введенные купоны.
5. Возможна очистка введенных значений купонов и в рамках других событий, например, при авторизации пользователя или при его заходе на страницу корзину и начале создания заказа, например OnPageStart или OnAfterUserLogin (подробнее).
Рабочий пример кода для очистки введенных многоразовых купонов.
Он должен быть расположен в init.php либо во включаемых файлах к нему.
#Удаление информации о введенных купонах после оформления заказа
AddEventHandler("sale", "OnSaleOrderSaved", Array("clearCupon", "OnSaleOrderSavedHandler"));
class clearCupon
{
function OnSaleOrderSavedHandler()
{
\Bitrix\Main\Loader::includeModule('sale');
\Bitrix\Sale\DiscountCouponsManager::init();
\Bitrix\Sale\DiscountCouponsManager::clear(true);
\Bitrix\Sale\DiscountCouponsManager::clearApply(true);
}
}
Надеемся, что предоставленная нами информация оказалась для вас полезной!