Fortoo
@Fortoo
Top-Web OpenCart

OpenСart исчезает корзина сразу после добавления, почему?

Я добавляю товар в корзину, при этом товар добавляется в миникорзину, но когда я перехожу в основную корзину, моя корзина пуста!
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fortoo
@Fortoo Автор вопроса
Top-Web OpenCart
нашёл на просторах такое решение:

Итак, проблема в вашем сеансе в 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 и всё заработало!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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