Добавление товара со свойствами в корзину

Добавление товара со свойствами в корзину

178
05.12.2018
14.12.2018

Данный код позволяет добавить в корзину товар вместе со свойствами товара

Получение корзины текущего пользователя

Добавление товара в корзины начинается с получения сущности самой корзины. Для получения текущей корзины пользователя, нужно воспользоваться кодом:

$basket = \Bitrix\Sale\Basket::loadItemsForFUser(
   \Bitrix\Sale\Fuser::getId(),
   \Bitrix\Main\Context::getCurrent()->getSite()
);

// массив объектов \Bitrix\Sale\BasketItem
$basketItems = $basket->getBasketItems();

$basketItem = $basketItems[0]; //current($basketItems);

// Свойства записи, массив объектов Sale\BasketPropertyItem
$basketPropertyCollection = $basketItem->getPropertyCollection();

Добавление свойств к элементу в корзине:

$properties = array();

if(null !== $request->getPost("color") && '' !== $request->getPost("color")){
    $properties['COLOR'] = array(
        'NAME' => 'Цвет',
        'CODE' => 'COLOR',
        'VALUE' => $request->getPost("color"),
        'SORT' => 100
    );
}

	if(isset($properties)) {
    $basketPropertyCollection = $item->getPropertyCollection();
    $basketPropertyCollection->setProperty($properties);
    $basketPropertyCollection->save();
}

Имейте ввиду, что элемент корзины на момент добавления свойств должен быть уже сохранен, иначе при сохранении коллекции со свойствами, они будут добавлены к элементу с id=0. Таким образом, до выполнения функции $basketPropertyCollection->save(); уже должно быть выполнено сохранение корзины $basket->save() или выполнено сохранение элемента корзины $basketItem->save(). Либо, можно не сохранять коллекцию свойств - тогда она сохранится вместе со всей корзиной.

Добавление элемента в корзину со свойствами

Таким образом, весь код, добавляющий товар со свойствами в корзину примет вид:

use Bitrix\Sale,
Bitrix\Main\Application;
$request = Application::getInstance()->getContext()->getRequest();

$basket = Sale\Basket::loadItemsForFUser(Sale\Fuser::getId(), Bitrix\Main\Context::getCurrent()->getSite());
$productId = intval($request->getPost("id"));
$quantity = intval($request->getPost("quantity"));
$properties = array();

if(null !== $request->getPost("color") && '' !== $request->getPost("color")){
    $properties['COLOR'] = array(
        'NAME' => 'Цвет',
        'CODE' => 'COLOR',
        'VALUE' => $request->getPost("color"),
        'SORT' => 100
    );
}

if ($item = $basket->getExistsItem('catalog', $productId, $properties)) {
        $item->setField('QUANTITY', $item->getQuantity() + $quantity); //добавляем указанное количество к существующему товару
} else {
    $item = $basket->createItem('catalog', $productId); //создаём новый товар в корзине
    $item->setFields(array(
        'QUANTITY' => $quantity,
        'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(),
        'LID' => Bitrix\Main\Context::getCurrent()->getSite(),
        'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProviderCustom',
    ));
}

if(isset($properties)) {
    $basketPropertyCollection = $item->getPropertyCollection();
    $basketPropertyCollection->setProperty($properties);
}
$basket->save();


Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

Возврат к списку