Работа с корзиной

Декабрь 4, 2018

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

Работа с корзиной при помощи классов "\Bitrix\Sale\Basket", "\Bitrix\Catalog\Product\Basket" и других.

Добавление в корзину товара с идентификатором в переменной $productId и количеством в переменной $quantity (замена функции "Add2BasketByProductID" в старом ядре):


$res = array();

$product = array(
    
'PRODUCT_ID' => $productId,
    
'QUANTITY' => $quantity,
);
$basketResult = \Bitrix\Catalog\Product\Basket::addProduct($product/*, $rewriteFields, $options */);
if (
$basketResult->isSuccess())
{
    
$res['success'] = true;
    
$data $basketResult->getData();
    
/* 
    Array ( 
        [ID] => 3 // basket id
    )
    */
    
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(
        \
Bitrix\Sale\Fuser::getId(), 
        \
Bitrix\Main\Context::getCurrent()->getSite()
    );
    
$refreshStrategy = \Bitrix\Sale\Basket\RefreshFactory::create(\Bitrix\Sale\Basket\RefreshFactory::TYPE_FULL);
    
$basket->refresh($refreshStrategy);    
    
$basket->save();
}
else
{
    
$res['success'] = false;
    
$res['error'] = $basketResult->getErrorMessages();
}

Получение объекта корзины и массива товаров в корзине:


$basket = \Bitrix\Sale\Basket::loadItemsForFUser(

    \
Bitrix\Sale\Fuser::getId(), 
    \
Bitrix\Main\Context::getCurrent()->getSite()
);
$basketItems $basket->getBasketItems(); // все товары
$basketItemsOrderable $basket->getOrderableItems(); // только товары, доступные для заказа

Получение количества товаров и количества позиций в корзине:


$productCount count($basket->getQuantityList());

$itemCount array_sum($basket->getQuantityList());
foreach (
$basket as $basketItem)
    
$arResult['basket'][$basketItem->getProductId()] = $basketItem->getQuantity(); // массив соответствий PRODUCT_ID и количества

Удаление товара с с идентификатором в переменной $productId из корзины (если в корзине присутствует один и тот же товар с разными свойствами, то все позиции корзины будут удалены):


foreach ($basket as $item)

{
    if(
$item->getProductId()!=$productId)
        continue;
    
$item->delete();
    
$refreshStrategy = \Bitrix\Sale\Basket\RefreshFactory::create(\Bitrix\Sale\Basket\RefreshFactory::TYPE_FULL);
    
$basket->refresh($refreshStrategy);    
    
$basket->save();
}

Поиск позиции в корзине:


$item $basket->getItemById($id); // по id, $item->getId()

$item $basket->getItemByBasketCode($basketCode); // по коду корзины, $item->getBasketCode()
$item $basket->getExistsItem($moduleId$productId$properties); // по коду товара и свойствам корзины
$item $basket->getExistsItemByItem($basketItem); // по объекту BasketItem

Получение информации о позиции в корзине:


$item->getId() // ID позиции корзины

$item->getBasketCode() // код корзины
$item->getProductId() // код товара
$item->getFUserId() // id владельца корзины

$item->getQuantity() // количество товара
$item->getWeight() // вес товара

$item->canBuy() // товар доступен для покупки
$item->isDelay() // товар отложен

$item->getCurrency() // код валюты

$item->getFinalPrice() // стоимость всех единиц позиции товара
$item->getPrice() // цена с учетом скидок
$item->getBasePrice() // цена без учета скидок
$item->getDefaultPrice() // цена по умолчанию
$item->getDiscountPrice() // величина скидки
$item->isCustomPrice() // цена указана вручную (без использования провайдера)

$item->getVatRate() // ставка гдс
$item->getPriceWithVat() // цена с ндс
$item->getBasePriceWithVat() // базовая цена с ндс
$item->getInitialPrice() // исходная цена без ндс 
$item->getVat() // ндс
$item->isVatInPrice() // цена включает ндс

$item->getCallbackFunction() // поле "CALLBACK_FUNC"
$item->getProviderEntity() // объект провайдера
$item->getProvider() // класс провайдера

$item->getField('PRICE'// получение значения любого поля
$item->getAvailableFields() //  массив кодов всех полей
$item->getSettableFields() // массив кодов изменяемых полей
$item->getCalculatedFields() // массив кодов генерируемых полей
$item->isCalculatedField('FIELD_NAME'// поле является генерируемым

$item->isBarcodeMulti()

Получение информации обо всех позициях в корзине:


$basket->getPrice(); // Цена всей корзины с учетом скидок

$basket->getBasePrice(); // Цена всей корзины без учета скидок  
$basket->getVatSum(); // Сумма  ндс
$basket->getVatRate(); // Ставка ндс

См. также:

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