Битрикс
13.04.2022
Битрикс. Получить список сработавщих скидок в корзине.
В 1С-Битрикс иногда нужно получить список скидок, которые реально сработали в корзине.
Например:
- для кастомного оформления корзины;
- вывода названий скидок;
- аналитики;
- отладки правил корзины;
- интеграций;
- проверки маркетинговых акций.
Получение списка примененных скидок
<?php
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(
\Bitrix\Sale\Fuser::getId(),
\Bitrix\Main\Context::getCurrent()->getSite()
);
$fuser = new \Bitrix\Sale\Discount\Context\Fuser(
$basket->getFUserId(true)
);
$discounts = \Bitrix\Sale\Discount::buildFromBasket(
$basket,
$fuser
);
$result = $discounts->getApplyResult(true);
echo '<pre>' .
print_r($result['DISCOUNT_LIST'], 1) .
'</pre>';
?>
Что делает этот код
Код:
- загружает корзину пользователя;
- создает discount context;
- вычисляет скидки;
- получает список примененных правил.
Загрузка корзины пользователя
\Bitrix\Sale\Basket::loadItemsForFUser()
Метод получает:
- текущую корзину пользователя.
Что такое FUser
В Битрикс:
FUser
— это внутренний идентификатор корзины пользователя.
Он существует:
- даже для неавторизованных пользователей.
Создание discount context
new \Bitrix\Sale\Discount\Context\Fuser()
создает контекст, необходимый для расчета скидок.
Построение скидок
\Bitrix\Sale\Discount::buildFromBasket()
создает объект скидок на основе корзины.
Получение результата применения скидок
$discounts->getApplyResult(true)
возвращает:
- результат применения скидок;
- список правил;
- изменения цен;
- данные купонов.
DISCOUNT_LIST
Основная информация находится в:
$result['DISCOUNT_LIST']
Что содержит DISCOUNT_LIST
- ID скидки;
- название скидки;
- тип скидки;
- размер скидки;
- условия применения;
- статус применения.
Пример вывода скидки
Array
(
[12] => Array
(
[NAME] => Скидка 10%
[ACTIVE] => Y
[SORT] => 100
)
)
Как вывести только названия скидок
<?php
foreach ($result['DISCOUNT_LIST'] as $discount)
{
echo $discount['NAME'] . '<br>';
}
?>
Как проверить применялась ли скидка
Можно проверить:
if (!empty($result['DISCOUNT_LIST']))
Где удобно использовать
- кастомная корзина;
- оформление заказа;
- email-уведомления;
- CRM;
- отладка скидок;
- маркетинговая аналитика.
Важно про calculate()
В некоторых случаях перед:
getApplyResult()
может потребоваться:
$discounts->calculate();
если скидки еще не были рассчитаны.
D7 API корзины
Код использует:
- современный D7 API Битрикс;
- пространство имен Bitrix\Sale.
Это предпочтительнее, чем старые классы:
CSaleDiscount
Итог
Чтобы получить список скидок, которые сработали в корзине 1С-Битрикс:
- загружаем корзину;
- создаем discount context;
- получаем apply result;
- читаем DISCOUNT_LIST.
Комментарии