amfsota

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

Рекомендуемые сообщения

amfsota    0

Всем привет.

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

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
amfsota    0

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
amfsota    0

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

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

Зачем-то в классе 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу