нашёл на просторах такое решение:
Итак, проблема в вашем сеансе в
system/library/cart/cart.php
После входа в систему инициируется класс клиента и запускается метод
__construct
.
на
line 22
файла
system/library/cart/cart.php
вы можете увидеть , как это работает:
// this code queries the current cart of your session id. so before you were logged int, your cart was saved to the database under a session id.
$cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE api_id = '0' AND customer_id = '0' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");
//after it finds your card products, it adds them to your CUSTOMER id.
foreach ($cart_query->rows as $cart) {
$this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE cart_id = '" . (int)$cart['cart_id'] . "'");
// The advantage of using $this->add is that it will check if the products already exist and increaser the quantity if necessary.
$this->add($cart['product_id'], $cart['quantity'], json_decode($cart['option']), $cart['recurring_id']);
}
Таким образом, причина, по которой ваша корзина не заполняется после входа в систему, заключается в том, что в этом сеансе. Возможно, некоторая часть вашего кода удаляет
$ this-> session-> getId ()
, поэтому скрипт не может найти продукты в корзине.
Чтобы отладить это, просто print_r, session_id и такие результаты
//print out the session id.
print_r($this->session->getId());
$cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE api_id = '0' AND customer_id = '0' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");
//print out the result of the query
print_r($cart_query->rows);
foreach ($cart_query->rows as $cart) {
$this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE cart_id = '" . (int)$cart['cart_id'] . "'");
// The advantage of using $this->add is that it will check if the products already exist and increaser the quantity if necessary.
$this->add($cart['product_id'], $cart['quantity'], json_decode($cart['option']), $cart['recurring_id']);
}
чтобы увидеть, что там. если он пуст, вам нужно будет копнуть глубже, чтобы увидеть, кто его удаляет.
если он заполнен, посетите таблицу phpmyadmin oc_cart, чтобы найти записи
session_id=$this->session->getId()
и попытаться выяснить, почему он не возвращает товары из корзины.
надеюсь это поможет.
ОДНАКО.... теперь я скажу(автор вопроса).
Хорошая идея поискать проблему в сессиях, поэтому я поделюсь своим опытом.
Действительно при потере сессии исчезает корзина, в моём случае проблемы была в том, что сайт на хостинге был настроен по протоколу
https://www.site.com
, а сами страницы могли открываться по
www.site.com
. Поэтому при отправке товара в корзину, менялся протокол и то что попадало в миникорзину, в итоге исчезало из основной корзины.
В итоге в конфиге прописал все подключения через
https://www
и настроил
редирект с www.site.com, на https://www.site.com
в .htaccess и всё заработало!