@devjob

Как удалить товар из корзины?

Комрады, хелп!
4-й день уже бьюсь с проблемой.

Корзина без заказа.

Пишу:
use \Bitrix\Main\Loader;
Loader::includeModule('sale');

$fuser = \Bitrix\Sale\FUser::getId();

$site = 's3';

        $obBasket = \Bitrix\Sale\Basket::loadItemsForFUser(
            $fuser,
            $site
        );
        
        
$items = $obBasket->getOrderableItems();

$bHasItem = false;
        $thisItem = false;
        $itemId = false;
        foreach ($items as $item)
        {
            if ($item->getField('PRODUCT_ID') !== $id) continue;

            $thisItem = $item;
            $bHasItem = true;
            $itemId = $item->getId();
        }

if ($bHasItem)
{
 $item2Delete = $obBasket->getItemById($itemId);
                var_dump($item2Delete);
                $rsDelete = $item2Delete->delete();
                self::log($rsDelete->isSuccess(), 'logs/deleteitem.log');
if ($rsDelete->isSuccess())
{
                $rsSaved = $obBasket->save();
if (!$rsSaved->isSuccess())
{
var_dump($rsSaved->getErrorMessages()); // Количество товара "Товар1" не может быть меньше или равным 0
}
}
}


Не пойму, в чем затык? почему не удается сохранить корзину?
  • Вопрос задан
  • 2217 просмотров
Решения вопроса 1
@PetrPo
Mikhail K, Так вот продолжение.
Вот это $item2Delete = $obBasket->getItemById($itemId) получение товара в корзине по Id записи, а не по id товара

Если ты используешь мой код из предыдущего вопроса, то все сработает
Bitrix\Main\Loader::includeModule('sale');

$siteId = 's1';
$fUserId = \Bitrix\Sale\FUser::getId();
$productId = 139;
$productByBasketItem = null;
$bProductInBasket = false;

$basket = \Bitrix\Sale\Basket::loadItemsForFUser($fUserId, $siteId);
$basketItems = $basket->getBasketItems();

if($basketItems) {
  foreach($basketItems as $basketItem) {
    if($basketItem->getField('PRODUCT_ID') == $productId) {
      $productByBasketItem = $basketItem;
      $bProductInBasket = true;
      break;
    }
  }
}

if($productByBasketItem) {
	$productByBasketItem->delete();
	$basket->save();
}

Проверки на success сам добавь
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
scottparker
@scottparker
if ($rs-Delete->isSuccess())
здесь название переменной не правильно написано, может быть поэтому
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы