Аналогичный вопрос задавался по ссылке
Не обновляется корзина методом CSaleBasket::Update на 1c bitrix? при этом не увидел ответа на него.
Более детализирую происходящее:
Используется самописный JS на стандартном компоненте корзины. Обновление идёт по Ajax
Вот функция которая его выполняет:
function productUpdateInBasket($PRODUCT_ID=0,$QUANTITY=0) {
//// Выполняем запрос в корзину узнаём есть ли у неё элемент с Ид_товара
$a = CSaleBasket::GetList(// Выполняем запрос в корзину узнаём есть ли у неё элемент с Ид_товара
$arOrder = array(),
$arFilter = array("PRODUCT_ID"=>$PRODUCT_ID),
$arGroupBy = false,
$arNavStartParams = false,
$arSelectFields = array()
);
if (count($a->arResult)) {// Если есть получаем Ид этого элемента в корзине(может не совпадать с Ид товара)
$idProductInBasket = $a->arResult[0]["ID"];
$arFields_new = array("QUANTITY"=>$QUANTITY);
return CSaleBasket::Update($idProductInBasket, $arFields_new);
}
return false;
}
Иногда переставали обновляться некоторые товары, то есть вообще всё работает. Но иногда у какого нибудь товара добавленного из каталога в корзине перестаёт обновляться количество через ajax на указанную функцию.
Причём перестаёт обновляться как это видно в стандартном компоненте так и в шапке информация в которой запрашивается через
CSaleBasket::GetList(//Выполняем запрос
array("NAME" => "ASC","ID" => "ASC"),
array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"),
false,
false,
array("ID","MODULE","PRODUCT_ID","QUANTITY","CAN_BUY","PRICE"));
Ситуация исправляется если нажимать удалить товар и заново его добавить.
Причём кнопку удалить нужно нажать 2-3 раза и только после этого товар удаляется.
Для удаления используется
function productDeleteFromBasket($PRODUCT_ID=0) {
//// Выполняем запрос в корзину узнаём есть ли у неё элемент с Ид_товара
$a = CSaleBasket::GetList(// Выполняем запрос в корзину узнаём есть ли у неё элемент с Ид_товара
$arOrder = array(),
$arFilter = array("PRODUCT_ID"=>$PRODUCT_ID),
$arGroupBy = false,
$arNavStartParams = false,
$arSelectFields = array()
);
if (count($a->arResult)) {// Если есть получаем Ид этого элемента в корзине(может не совпадать с Ид товара)
$idProductInBasket = $a->arResult[0]["ID"];
$arFields_new = array("QUANTITY"=>0);
return CSaleBasket::Update($idProductInBasket, $arFields_new);
}
return false;
}
Что это? Кеширование? Можно ли как то CSaleBasket заставить принудительно его обновить?
Даже когда количество не обновляется return CSaleBasket::Update($idProductInBasket, $arFields_new); у метода возвращает положительный результат без ошибок.