Пришлось опять столкнуться с этой странностью битрикса, перебрав несколько вариантов остановился на костыле. У меня задача немного дургая была - есть куча купонов на 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'), ['….'=>'']));
}
}
}
|