Обнаружил, может быть неточность в логике, которая приводит к тому, что таблица для брошенных корзин засоряется дублями данных. Типичный кейс - положили в корзину, закрыли браузер, открыли браузер спустя время, зашли на сайт - всё лежит в корзине, как должно. Но если посмотреть на таблицу #__jshopping_cart_temp, то в ней будет 2 разных сессии с одинаковыми корзинами.
Почему так происходит?
В методе CartModel - load() происходит проверка на наличие куки для брошенной корзины в методе loadProductsFromTempCart().
function loadProductsFromTempCart(){
$tempcart = \JSFactory::getModel($this->model_temp_cart, 'Site');
if (!count($this->products) && $tempcart->getIdTempCart() && $tempcart->checkAccessToTempCart($this->type_cart)){
/**
* из старой куки получаем Id старой сессии и
* по этому id загрузили из базы данных старую корзину
*/
$products = $tempcart->getProducts($this->type_cart);
if (count($products)){
// Если там не пусто - присваиваем
$this->products = $products;
// и сохраняем
$this->saveToSession();
}
}
}
Вроде всё нормально. НО! Немалая часть шевелений в CartModel проходит через метод saveToSession(), который вызывает метод insertTempCart() модели TempcartModel. Цитирую 2 метода:
function getUniqId(){
return session_id();
}
function insertTempCart($cart){
// Проверяем всё можно сохранять корзину
if (!$this->checkAccessToTempCart($cart->type_cart)){
return 0;
}
// И вот собака зарыта - получаем id ТЕКУЩЕЙ сессии - то есть новой
$id = $this->getUniqId();
$this->setIdTempCart($id);
$this->delete($id, $cart->type_cart);
if (!count($cart->products)){
return 0;
}
$this->save($id, $cart->type_cart, $cart->products);
return 1;
}
Получается, что в рамках одной сессии всё происходит как надо: по id текущей сессии корзина обновляется, удаляется и т.д. Но если сессии разные, то база данных замусорится брошенными корзинами одного пользователя. При этом использоваться, конечно, будет только последняя - актуальная. Но база данных при этом разрастётся.
Joomla: 5.0.2
JoomShopping: 5.2.1
JoomShopping: 5.2.1
Joomla developer. https://web-tolk.ru JoomShopping Bitrix24 integration, custom developing.