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

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

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

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

$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();
Количество показов: 7560
05.12.2018

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

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

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

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

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.