Нам понадобится параметр CUSTOM_PRICE = 'Y'
, при помощи этого, наш PRICE
теперь можно делать каким угодно, какая бы стоимость у вас не была в каталоге.
Код выглядит так:
//ID товара $productId = 111; $quantity = 1; $basket = \Bitrix\Sale\Basket::loadItemsForFUser( \Bitrix\Sale\Fuser::getId(), \Bitrix\Main\Context::getCurrent()->getSite() ); if ($item = $basket->getExistsItem('catalog', $productId)){ $item->setField('QUANTITY', $item->getQuantity() + $quantity); }else{ $item = $basket->createItem('catalog', $productId); $item->setFields([ 'QUANTITY' => $quantity, 'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(), 'LID' => \Bitrix\Main\Context::getCurrent()->getSite(), 'PRICE' => 123, // цена 'CUSTOM_PRICE' => 'Y', 'NAME' => 'Общая стоимость за услуги' ]); } $basket->save();
Вот и всё, товар добавлен в корзину. Удобно применять данный код при “кастомном” оформлении заказа через API.
Комментарий про то как выводить комментарий 🙂
Перед
$r = $order->save();
Добавить
$order->setField(‘USER_DESCRIPTION’, $_REQUEST[‘comment’]);
где $_REQUEST[‘comment’] – ваш комментарий
товар можно добавлять не только в корзину, но и в каталог. заголовок нужно сделать точнее.
Что вы имеете ввиду? Чтобы добавить товар в каталог при помощи API нужно использовать CIBlockElement::Add + пару методов для изменения цены и количества.
толкьо при указании своей цены перестают работать купоны, это тоже надо учитывать
Более того, не работают правила корзины вообще