Шпаргалка по Bitrix. Работа с купонами и скидками — PROG-TIME

Шпаргалка по Bitrix. Работа с купонами и скидками

17.03.2023
Содержание:

В новой записи собран код для работы с купонами, скидками для интернет-магазина на CMS Bitrix. Мы с вами рассмотрим: как активировать купоны, как деактивировать купоны, как проверять существование купона и как получать доступные купоны для пользователя.

Для начала вам нужно создать несколько купонов в админке сайта. Для этого переходим во вкладку Маркетинг -> Товарный маркетинг -> Правила работы с корзиной здесь указываем условие при котором купон будет доступен и прописываем действие которое выполняется после активации купона.

Для работы методов пропишите в шапке странице подключение области видимости для методов.

use Bitrix\Main,
    Bitrix\Sale;

Получить список всех активных купоном

$listCoupon = Sale\DiscountCouponsManager::get(true);

echo '<pre>';
var_dump($listCoupon);
echo '</pre>';

Активация купона для текущей корзины

Данный запрос используется для привязки купона к текущей корзине, поэтому его нужно выполнять по выполнению события. Не нужно его выполнять после каждой загрузке страницы.

// код купона
$coupon = 'BEST-PROG-TIME';
					
// применяем купон
Sale\DiscountCouponsManager::add($coupon);

// получаем объект корзины для текущего пользователя
$oBasket = Sale\Basket::loadItemsForFUser(
    Sale\Fuser::getId(),
    \Bitrix\Main\Context::getCurrent()->getSite()
);

// получаем объект скидок для корзины
$oDiscounts = Sale\Discount::loadByBasket($oBasket);

// обновляем поля в корзине
$oBasket->refreshData(['PRICE','COUPONS']);

// пересчёт скидок для корзины
$oDiscounts->calculate();

// получаем результаты расчёта скидок для корзины
$result = $oDiscounts->getApplyResult();

Деактивация купона

Деактивируется купон также 1 запросом и не требует повторного выполнения.

// код купона
$coupon = 'BEST-PROG-TIME';
					
// отменяем работу купона
Sale\DiscountCouponsManager::delete($coupon);

// получаем объект корзины для текущего пользователя
$oBasket = Sale\Basket::loadItemsForFUser(
    Sale\Fuser::getId(),
    \Bitrix\Main\Context::getCurrent()->getSite()
);

// получаем объект скидок для корзины
$oDiscounts = Sale\Discount::loadByBasket($oBasket);

// обновляем поля в корзине
$oBasket->refreshData(['PRICE','COUPONS']);

// пересчёт скидок для корзины
$oDiscounts->calculate();

// получаем результаты расчёта скидок для корзины
$result = $oDiscounts->getApplyResult();

Деактивация всех активных купонов

/* Если true, то введенные купоны будут убраны из сессии. */
Sale\DiscountCouponsManager::clear(true);

Проверка активности купона

// код купона
$coupon = 'BEST-PROG-TIME';
// проверяем есть ли применённые купоны
Sale\DiscountCouponsManager::isEntered();

Простая проверка существования купона в системе

if (Sale\DiscountCouponsManager::isExist($coupon)) {
    // купон существует
}