Пришлось опять столкнуться с этой странностью битрикса, перебрав несколько вариантов остановился на костыле. У меня задача немного дургая была - есть куча купонов на 2000 скидки, нужно их применять даже когда заказ меньше 2000.
1. создаем правило и настраиваем его ан выполнение 2 действий: - даем 100% скидку товарам у которых в названии есть подстрока "…." (пришлось так по дебильному, потому что по свойство в товаре условие не работает, как бы не пробовал не по Символьному не по названию, просто не срабатывает, только когда в названии есть что-то). второе действие - даем 2000р скидки на всю корзину (оно без условий)
2. а дальше обработчик нужно добавить, который будет автоматом добьавлять к назвнаию подстроку и убирать в зависимости от условий корзины и купона примененного (у меня их 2 типа и размер скидки из названия правила беру, у вас может быть как угодно)
3. ну а дальше надо будет убрать эту подстроку из публички и из шаблонов писем, из публичке можно жестко поступить OnEndBufferContent ипользовать.
Это явно костыль, но что поделать, когда надо быстро. Еще вариант создавать свое правила для Правил рабофт с корзиной, но это может быть дольше и нормальных актуальных\работаюищих примеров не нашел.
Код обработчика корзины:
1. создаем правило и настраиваем его ан выполнение 2 действий: - даем 100% скидку товарам у которых в названии есть подстрока "…." (пришлось так по дебильному, потому что по свойство в товаре условие не работает, как бы не пробовал не по Символьному не по названию, просто не срабатывает, только когда в названии есть что-то). второе действие - даем 2000р скидки на всю корзину (оно без условий)
2. а дальше обработчик нужно добавить, который будет автоматом добьавлять к назвнаию подстроку и убирать в зависимости от условий корзины и купона примененного (у меня их 2 типа и размер скидки из названия правила беру, у вас может быть как угодно)
3. ну а дальше надо будет убрать эту подстроку из публички и из шаблонов писем, из публичке можно жестко поступить OnEndBufferContent ипользовать.
Это явно костыль, но что поделать, когда надо быстро. Еще вариант создавать свое правила для Правил рабофт с корзиной, но это может быть дольше и нормальных актуальных\работаюищих примеров не нашел.
Код обработчика корзины:
Код |
---|
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleBasketBeforeSaved', 'checkBasketOnAbsoluteCoupons' ); function checkBasketOnAbsoluteCoupons(\Bitrix\Main\Event $event){ /** @var \Bitrix\Sale\Basket $basket */ /** @var \Bitrix\Sale\BasketItem $basketItem */ $basket = $event->getParameter("ENTITY"); $hasCoupon=false; $minOrderP=2000; $prpsC=[138,139]; foreach(\Bitrix\Sale\DiscountCouponsManager::get() as $e){ if(in_array($e['DISCOUNT_ID'],$prpsC)){ $hasCoupon=true; $minOrderP=intval($e['DISCOUNT_NAME']); } } $basketPrice=$basket->getPrice(); foreach($basket->getBasketItems() as $basketItem){ if($hasCoupon){ $name=strtr($basketItem->getField('NAME'), ['….'=>'']).($minOrderP>$basketPrice ? '….' : ''); $basketItem->setField('NAME', $name); }else{ $basketItem->setField('NAME', strtr($basketItem->getField('NAME'), ['….'=>''])); } } } |