Задать вопрос

Существует ли товар в корзине Bitrix?

Дано:
Редакция Интернет-магазин + CRM.
Все обновления актуальны.

Задача:
Проверить - существует ли товар в корзине.
Тип товара - SKU с 1 свойством, добавляемым в корзину.

Имею код:
$obBasket = Basket::loadItemsForFUser(
	FUser::getId(),
	's3'
);

$productId = $_REQUEST['id'];
$obItem = $obBasket->getExistsItem('catalog', $productId, ['CODE' => 'PROP1', 'VALUE' => 'electron']);
var_dump($obItem); // null


Товар в корзине точно есть, но по-какой-то причине возвращается null.
  • Вопрос задан
  • 3424 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
@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, там сам по ситуации выбирай как надо
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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