Событие "Ввод купона" в Битрикс

Как мы уже выяснили, в битрикс отсутствует событие "ввод купона". Можно, конечно, проводить обработку купонов на каждое соыбтие изменения корзины, но получим лишнюю нагрузку, чего не хотелось бы.

   После поисков события "Ввод купона на скидку" или его аналога, придумал такое решение: подписываемся на событие OnSaleComponentOrderJsData, а чтобы не вызывать код обработчика купона на каждый чих, проверяем тип события:

$eventManager->addEventHandler('sale', 'OnSaleComponentOrderShowAjaxAnswer', 'onSaleComponentOrderShowAjaxAnswerHandler');

function onSaleComponentOrderShowAjaxAnswerHandler (&$arResult, &$arParams)  {
    if ($_REQUEST['action'] == 'enterCoupon') {
         /* Обрабатываем событие ввода купона.
        Сам купон берем тут: $arResult['coupon']; */         
    }
}
     Итог: проблема решена без кастомизации компонента sale.order.ajax и избыточных вызовов нашего метода.

     P.S. если в Вашей ситуации требуется обрабатывать только случаи успешного применения купонов, то воспользуйтесь методом "из коробки":

use Bitrix\Main\Loader;
use Bitrix\Sale\DiscountCouponsManager;

Loader::includeModule('sale');

addEventHandler('sale', DiscountCouponsManager::EVENT_ON_COUPON_APPLY, 'onCouponApplyHandler');

function onCouponApplyHandler($coupon) {
   /* Обрабатываем событие ввода купона. */    
}
Рейтинг

Возврат к списку

Раздел Bitrix
(Codeblog)