Добрый день, сообщество.
Столкнулся недавно с такой проблемой, сайт работает достаточно давно, последний месяц клиенты стали жаловаться на то, что не могут удалить товар из корзины, возможно проблема возникла после обновления bitrix.
Код стандартный работал уже давно.
Метод для удаления, который выдаёт ошибку:
Возникает следующая ошибка в обоих случаях:
Нюансы:
1. Замечено, что это ошибка валится, только тогда, когда товары в корзину добавлены давно, если закидывать товары здесь и сейчас, то всё работает без ошибок.
2. Логировал движок - метод Bitrix\Sale\Internals\Catalog\Provider::prepareContext(NULL, array) получает NULL - просит Sale\OrderBase $order - но заказа то, ещё нет, откуда ему взяться.
3. Обработчики в системе не влияют на данную проблему.
Может, кто сталкивался, что можете посоветовать?
Столкнулся недавно с такой проблемой, сайт работает достаточно давно, последний месяц клиенты стали жаловаться на то, что не могут удалить товар из корзины, возможно проблема возникла после обновления bitrix.
Код стандартный работал уже давно.
Метод для удаления, который выдаёт ошибку:
Код |
---|
public function delete($arOffersId) { $this->getFUserBasket(); if ( $arOffersId && is_array($arOffersId) ) { foreach ( $this->objBasket as $objItem ) { if ( !in_array($objItem->getProductId(), $arOffersId) ) { continue; } $objItem->delete(); $objItem->save(); $refreshStrategy = \Bitrix\Sale\Basket\RefreshFactory::create(\Bitrix\Sale\Basket\RefreshFactory::TYPE_FULL); $this->objBasket->refresh($refreshStrategy); $this->objBasket->save(); } } } |
Пробовал без d7 очищать всю корзину
Код |
---|
public function clear() { \CSaleBasket::DeleteAll(\Bitrix\Sale\Fuser::getId()); } |
Код |
---|
[TypeError] Argument 1 passed to Bitrix\Sale\Internals\Catalog\Provider::prepareContext() must be an instance of Bitrix\Sale\OrderBase, null given, called in /home/bitrix/dstrend.ru/public/bitrix/modules/sale/lib/internals/catalog/provider.php on line 390 (0) /home/bitrix/dstrend.ru/public/bitrix/modules/sale/lib/internals/catalog/provider.php:1267 #0: Bitrix\Sale\Internals\Catalog\Provider::prepareContext(NULL, array) /home/bitrix/dstrend.ru/public/bitrix/modules/sale/lib/internals/catalog/provider.php:390 #1: Bitrix\Sale\Internals\Catalog\Provider::tryReserve(object) /home/bitrix/dstrend.ru/public/bitrix/modules/sale/lib/reservequantity.php:165 #2: Bitrix\Sale\ReserveQuantity->onFieldModify(string, string, integer) /home/bitrix/dstrend.ru/public/bitrix/modules/sale/lib/internals/entity.php:279 #3: Bitrix\Sale\Internals\Entity->setField(string, integer) /home/bitrix/dstrend.ru/public/bitrix/modules/sale/lib/reservequantity.php:134 #4: Bitrix\Sale\ReserveQuantity->setQuantity(integer) /home/bitrix/dstrend.ru/public/bitrix/modules/sale/lib/reservequantity.php:263 #5: Bitrix\Sale\ReserveQuantity->delete() /home/bitrix/dstrend.ru/public/bitrix/modules/sale/lib/basketitem.php:380 #6: Bitrix\Sale\BasketItem->delete() /home/bitrix/dstrend.ru/public/bitrix/modules/sale/lib/compatible/basketcompatibility.php:977 #7: Bitrix\Sale\Compatible\BasketCompatibility::delete(string) /home/bitrix/dstrend.ru/public/bitrix/modules/sale/mysql/basket.php:834 #8: CSaleBasket::DeleteAll(integer) /home/bitrix/dstrend.ru/public/local/php_interface/include/lib/Dstrend/Basket.php:197 #9: Dstrend\Basket->clear() /home/bitrix/dstrend.ru/public/local/php_interface/include/lib/Dstrend/Basket.php:64 #10: Dstrend\Basket->basketHandling(array, integer, string) /home/bitrix/dstrend.ru/public/local/_ajax/basket.php:25 ---------- |
Нюансы:
1. Замечено, что это ошибка валится, только тогда, когда товары в корзину добавлены давно, если закидывать товары здесь и сейчас, то всё работает без ошибок.
2. Логировал движок - метод Bitrix\Sale\Internals\Catalog\Provider::prepareContext(NULL, array) получает NULL - просит Sale\OrderBase $order - но заказа то, ещё нет, откуда ему взяться.
3. Обработчики в системе не влияют на данную проблему.
Может, кто сталкивался, что можете посоветовать?