Данный код позволяет добавить в корзину товар вместе со свойствами товара
Получение корзины текущего пользователя
Добавление товара в корзины начинается с получения сущности самой корзины. Для получения текущей корзины пользователя, нужно воспользоваться кодом:
$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();
Разработка сайта
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Сопровождение сайта
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Работы по сайту
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.