Подарки в интернет-магазине

Модуль расширенного управления меню для битрикс

Апрель 9, 2020

Теги: Магазин

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

При этом, чтобы пользователь получил подарок, он должен добавить его в корзину и он появится там со стопроцентной скидкой (при условии количества 1, при большем количестве подарок предоставляться не будет, это логика, заложенная в ядре интернет-магазина).

Получение коллекции подарков для текущей корзины пользователя:


\Bitrix\Sale\Compatible\DiscountCompatibility::stopUsageCompatible();

$basketStorage = \Bitrix\Sale\Basket\Storage::getInstance(\Bitrix\Sale\Fuser::getId(), \Bitrix\Main\Context::getCurrent()->getSite());
$basket $basketStorage->getBasket();        
$giftManager = \Bitrix\Sale\Discount\Gift\Manager::getInstance();
if(
$userId = \Bitrix\Main\Engine\CurrentUser::get()->getId())
$giftManager->setUserId($userId);
$collections $giftManager->getCollectionsByBasket($basket);
\
Bitrix\Sale\Compatible\DiscountCompatibility::revertUsageCompatible();

Получение коллекции подарков при покупке конкретных товаров:


\Bitrix\Sale\Compatible\DiscountCompatibility::stopUsageCompatible();

$giftManager = \Bitrix\Sale\Discount\Gift\Manager::getInstance();
$collections $this->giftManager->getCollectionsByProduct(
    \
Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), \Bitrix\Main\Context::getCurrent()->getSite()), $potentialBuy
);
\
Bitrix\Sale\Compatible\DiscountCompatibility::revertUsageCompatible();

Пример разбора коллекции с определением типа товара:


foreach ($collections as $collection)

{
    foreach (
$collection as $gift)
    {    
        if(!
$product=\Bitrix\Catalog\ProductTable::getById($gift->getProductId())->fetch())
            continue;
        switch(
$product['TYPE'])
        {
            case \
Bitrix\Catalog\ProductTable::TYPE_PRODUCT:
            case \
Bitrix\Catalog\ProductTable::TYPE_SKU:
                ...
            break;
            case \
Bitrix\Catalog\ProductTable::TYPE_OFFER:
                ...
            break;
            case \
Bitrix\Catalog\ProductTable::TYPE_SET:
            case \
Bitrix\Catalog\ProductTable::TYPE_EMPTY_SKU:
            case \
Bitrix\Catalog\ProductTable::TYPE_FREE_OFFER:

            break;
        }
    }
}

См. также:

← Переход к списку