Николаев Виталий
Блог веб-разработчика: Битрикс, PHP, Python, Linux и SEO
Битрикс Битрикс
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.
18 просмотров

Комментарии

Где заказы?
Почему у одних компаний очередь из клиентов, а у других пустой сайт и тишина?
Телеграм канал «Где заказы?» — про продажи, сайты и ошибки бизнеса на реальных примерах. Подписаться