Перейти к содержанию
amfsota

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

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

Всем привет.

Возникла очередная проблемка с 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 пользователей онлайн

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

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.