Задать вопрос
  • Существует ли товар в корзине Bitrix?

    @PetrPo
    Ждал красивого решения от битрикса? )) А вот и хрен. Чтобы получить твой \Bitrix\Sale\BasketItem $obItem придется передать все его $properties в 3-ий параметр getExistsItem, типа
    $obItem = $obBasket->getExistsItem('catalog', $productId, [
    	0 => ['CODE' => 'PROP1', 'VALUE' => 'electron'],
    	//......
    ]);

    вообще не понятно зачем этот метод public, если им хрен воспользуешься, надо знать все свойства товара в корзине, у меня это выглядело так
    $obItem = $obBasket->getExistsItem('catalog', $productId, [
    	0 => ['CODE' => 'ARTNUMBER', 'VALUE' => '235-81-03'],
    	1 => ['CODE' => 'COLOR_REF', 'VALUE' => 'Черный'],
    	2 => ['CODE' => 'SIZES_CLOTHES', 'VALUE' => 'XS'],
    	3 => ['CODE' => 'CATALOG.XML_ID', 'VALUE' => 'clothes_offers_s1'],
    	4 => ['CODE' => 'PRODUCT.XML_ID', 'VALUE' => '332#337'],
    ]);


    Вообщем решение конечно будет не таким красивым, как просто методом воспользоваться, но если метод getExistsItem посмотреть, там тоже самое делается, только еще кое-что
    \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;
    		}
    	}
    }
    
    var_dump($bProductInBasket);
    var_dump($productByBasketItem);

    В примере написал булево $bProductInBasket и записал сам объект \Bitrix\Sale\BasketItem в $productByBasketItem, там сам по ситуации выбирай как надо
    Ответ написан
    6 комментариев