Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] обновление корзины при авторизации на странице checkout


Recommended Posts

Всем привет.

Возникла очередная проблемка с Opencart 2.0

Не авторизованный пользователь кладёт в корзину покупки, затем на этапе оформления заказа авторизуется.

У пользователя в профиле могут быть сохранённые товары в корзине, к ним приплюсовываются те товары, которые он выбрал без авторизации.

Не могу найти, где происходит сверка товаров и слияние двух корзин.

Авторизация происходит в контроллере checkout/login.php (запускается ajax-ом при нажатии на кнопку button-login)

Далее возвращается json['redirect']="...checkout/checkout"

Однако обновление корзины происходит до загрузки скрипта checkout.php

Не подскажите, где?

Надіслати
Поділитися на інших сайтах


Ребята очень надо разобраться, помогите, пожалуйста.

Написал калькуляторы со своими свойствами, из карточки товара все цены подтягиваются, в админке тоже всё ОК, но если пользователь с товаром авторизуется - проблема.

Почему бы просто не переписать customer_id в таблице cart, но нет почему-то затирается запись а вместо неё рисуется новая с дефолтными свойствами.

Надіслати
Поділитися на інших сайтах


Мдаа... Нет ответа. Неужели никто не знает?

Опять разобрался сам.

Зачем-то в классе cart в конструкторе происходит подчистка корзины от устаревших данных и требуемая перезапись значений.

Вот кусок кода, может кому нужно будет:

    public function __construct($registry) {
        $this->config = $registry->get('config');
        $this->customer = $registry->get('customer');
        $this->session = $registry->get('session');
        $this->db = $registry->get('db');
        $this->tax = $registry->get('tax');
        $this->weight = $registry->get('weight');
	$this->load = $registry->get('load');
	$this->registry = $registry;

        // Remove all the expired carts with no customer ID
        $this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE customer_id = '0' AND date_added < DATE_SUB(NOW(), INTERVAL 1 HOUR)");

        if ($this->customer->getId()) {
            // We want to change the session ID on all the old items in the customers cart
            $this->db->query("UPDATE " . DB_PREFIX . "cart SET session_id = '" . $this->db->escape($this->session->getId()) . "' WHERE customer_id = '" . (int)$this->customer->getId() . "'");

            // Once the customer is logged in we want to update the customer ID on all items he has
            $cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE customer_id = '0' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");

            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']);
            }
        }
    }

Кстати, тут ещё и время хранения товаров не авторизованных пользователей устанавливается.

Тема закрыта.

Надіслати
Поділитися на інших сайтах


Гість
Ця тема закрита для публікації повідомлень.
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.