Получение корзины текущего пользователя
Добавление товара в корзины начинается с получения сущности самой корзины. Для получения текущей корзины пользователя, нужно воспользоваться кодом:
$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();
