@SirBataneg
веб-разработчик

Как добавить товар в корзину при добавлении другого товара?

Здравствуйте, коллеги!

После обновления 18.1.3 непонятно работает Add2BasketByProductID.

Для определённых товаров нужно добавить в корзину ещё один заранее известный товар.
На событии OnBeforeBasketAdd выполняю методом Add2BasketByProductID добавление товара.

AddEventHandler("sale", "OnBeforeBasketAdd", Array("CSaleHandlers","OnBeforeBasketAddHandler") );

class CSaleHandlers{
   function OnBeforeBasketAddHandler(&$arFields) {
      $arID = array(896,897,898,899,900,901,902,903,904,906,1457,1458);
      if( in_array($arFields["PRODUCT_ID"], $arID) ){
         $pos = Add2BasketByProductID( 1027, 2, array(), array() );
         AddMessage2Log('$pos = '.print_r($pos, true),'');
      }
   }
}

В результате получаю в $pos код позиции товара в корзине, то есть метод отработал, ошибки нет. Но товара в корзине нет.

В случае, если товар с PRODUCT_ID = 1027 уже есть в корзине, то метод успешно добавляет ему указанное количество 2шт.
  • Вопрос задан
  • 1339 просмотров
Решения вопроса 1
@SirBataneg Автор вопроса
веб-разработчик
Евгений Жуков на форуме помог решить данный вопрос советом использовать "метод \Bitrix\Catalog\Product\Basket::addProduct (для публичных компонент) и \Bitrix\Catalog\Product\Basket::addProductToBasket (для произвольных, в т.ч. административных скриптов)."
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
После функции Add2BasketByProductID попробуйте добавить
if ($ex = $APPLICATION->GetException()){
     \Bitrix\Main\Diag\Debug::dumpToFile($ex->GetString());
}


Можно попробовать добавить товар в корзину так:
$product = array(
    'PRODUCT_ID' => $productId,
    'QUANTITY' => $quantity
);
/*@var $basketResult Bitrix\Main\Result*/
$basketResult = Catalog\Product\Basket::addProduct($product);
if (!$basketResult->isSuccess()) {
    \Bitrix\Main\Diag\Debug::dumpToFile(implode('; ', $basketResult->getErrorMessages()));
}


логи от dumpToFile можно посмотреть в /__bx_log.log
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы