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

[Решено?..] Не всегда очищается корзина после оформления заказа


notfa

Recommended Posts

Версия 1.5.3.1

Заметил такой баг, но не могу воспроизвести его сам, только у покупателей.

Возможно кто-то сталкивался.

После оформления заказа у покупателей не очищается корзина, или очищается, но потом снова все товары из заказа появляются как добавленные в корзину.

Сломал голову, не могу найти где баг.

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


  • 5 months later...

1. Ссылки давайте на свои сайты.

2. Огласили бы к примеру, что пользователя с именем "тест+цифры" ваши менеджеры учитывать не будут, чтобы желающие могли проверить оформление заказа и корзину.

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

Дело в том что такое происходит не у всех и не всегда, закономерность мы выявить не смогли и сами повторить такой опыт нарочно тоже не смогли. Пару раз было, что сегодня успешно оформили заказ, завтра зашли в личный кабинет, весь вчерашний заказ снова в корзине + только что добавленные товары.

Ссылка hmade.com.ua, опенкарт 1.5.1.3

Оглашаем: пользователей с именем "тест+цифры" менеджеры учитывать не будут.

За решение проблемы готовы сказать спасибо в денежном эквиваленте.

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


Сделайте переадресацию с  http://hmade.com.ua/  на  http://www.hmade.com.ua/ , потому что иначе у вас скрипты не работают на главной странице и кукисы для двух разных доменов сохраняются

Отсюда и бага с корзиной

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

  • 2 weeks later...

Не помогло! 

Все так же: заказ оформляется, корзина очищается, через два дня покупатель заходит в свой личный кабинет и видит там все те же товары в корзине, которые он купил два дня назад. От браузера не зависит.

Подскажите, что это может быть?

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


  • 2 months later...
  • 4 weeks later...

в теме предлагают 3 варианта решения:

1. В system/library/cart.php добавить обнуление поля в системную функцию очистки корзины

<modification>
    <id>Bug Fix for Clear Cart</id>
    <version>1.0</version>
    <vqmver>2.1.6</vqmver>
    <author>OpenCartHelp.com</author>
    <file name="system/library/cart.php">
        <operation error="log">
            <search position="after" index="2"><![CDATA[$this->session->data['cart'] = array();]]></search>
            <add><![CDATA[
        if (isset($this->session->data['customer_id'])) {
            $customer_id = $this->session->data['customer_id'];

            $this->db->query("UPDATE " . DB_PREFIX . "customer SET cart = '' WHERE customer_id = '" . (int)$customer_id . "'");
        }
            ]]></add>
        </operation>
    </file>
</modification>

 

2. в /catalog/model/checkout/order.php в public function confirm( добавить

if ($order_info['customer_id']) {
     $this->db->query("UPDATE " . DB_PREFIX . "customer SET cart = '' WHERE customer_id = '" . (int)$order_info['customer_id' . "'");
}

или

if (!empty($order_info['customer_id'])) {
     $this->db->query("UPDATE `" . DB_PREFIX . "customer` SET `cart` = '' WHERE `customer_id` = '" . (int)$order_info['customer_id'] . "'");
}

отличия вижу, просто ещё не проверял какой рабочий

3. Тоже в catalog/model/checkout/order.php

НО в двух местах перед

$this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id

добавить

$this->db->query("UPDATE " . DB_PREFIX . "customer SET cart = '' WHERE customer_id = '" . (int)$order_info['customer_id'] . "'");

 

 

Прошу совета профи, какой вариант адекватней с точки зрения работы движка.

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


Мы ошибку нашли, гуглите http://forum.opencart.com/, там есть топик с этой проблемой.

Ошибка кстати вылезала еще раз, там косяк в двух местах, на опенкарт.ком и про вторую проблему есть топик.

 

ПС. Ошибка элементарная, но времени убили на ее отлов - уйму))

спасибо конечно... но все 3 варианта, что я тут указал, взяты именно оттуда.

и пусть слегка, но отличаются. Меня интересовала идеологическая близость к принципам работы движка.

 

а вот про так и не названную вторую это жестоко...

мало того что не дали наводок, так ещё и пообещали смерть уйме моего времени. Вот спасибо

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


  • 2 weeks later...

скорее всего, речь идет о посте

 

 

We are not seeing anything like the order not finishing. Since we are also not having issue with receiving the email confirmations of orders does that mean that we are left with:
- Bug in the order confirm function (less likely)
- Bug in the order update function (less likely)
This is resulting in many clients cancelling their order, calling in after seeing the issue, or ordering more products than they intended so any further ideas would be great as we need to find a fix quickly.

 

т.е. баг в модели /model/checkout/order/

1) function confirm

2) function update

 

решение приведено в посте #9 любой из вариантов.

 

2Notfa, никогда недолюбливал людей, которые так делают. Либо пиши всю инфу, либо не пиши ничего

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


  • 4 months later...

Пока работаем по 3-му варианту. будут сбои сразу отпишусь.

глядишь кому поможет

На каком варианте остановились?

У меня на 1.5.3.1 после решения из третьего варианта периодические жалобы не прекратились.

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


  • 2 weeks later...

Мы уже и обновились с 1.5.1.3 на 1.5.5.1, а глюк этот остался :(

Напишите, кому какой вариант помог.

 

 

Никто не замечал связи между этим глюком и способами оплаты и/или доставки?

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


Смотрите, если я все правильно поняла, то судя по буржуйскому топику, ссылка на который была выше, проблема возникает когда покупатель не нажимает на кнопку Продолжить на странице checkout/success, а просто закрывает браузер на этой странице. Когда он потом залогинивается, опенкарт думает что надо восстановить старую сессию и добавляет товары с прошлого заказа в корзину.

Поскольку заставить всех нажимать на кнопку Продолжить мы не сможем, надо в checkout/success прописать код закрывающий и затем открывающий новую сессию. Именно по кнопке Продолжить для покупателя открывается новая сессия после оформления заказа.

Кто сможет это грамотно реализовать для 1.5.5.1?

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


  • 2 weeks later...

вариант предложенный deeman разработчиком модуля Simple - упрощенная регистрация и заказ 4.1.4

 

в файле

\system\library\customer.php

есть

$this->db->query("UPDATE " . DB_PREFIX . "customer SET cart = '" . $this->db->escape(isset($this->session->data['cart']) ? serialize($this->session->data['cart']) : '') . "', wishlist = '" . $this->db->escape(isset($this->session->data['wishlist']) ? serialize($this->session->data['wishlist']) : '') . "', ip = '" . $this->db->escape($this->request->server['REMOTE_ADDR']) . "' WHERE customer_id = '" . (int)$this->customer_id . "'");

его надо заменить на

$this->db->query("UPDATE " . DB_PREFIX . "customer SET cart = '" . $this->db->escape(!empty($this->session->data['cart']) ? serialize($this->session->data['cart']) : '') . "', wishlist = '" . $this->db->escape(isset($this->session->data['wishlist']) ? serialize($this->session->data['wishlist']) : '') . "', ip = '" . $this->db->escape($this->request->server['REMOTE_ADDR']) . "' WHERE customer_id = '" . (int)$this->customer_id . "'");

и в ystem\library\cart.php 

добавить после public function clear() {

if ($this->customer->isLogged()) {
              $this->db->query("UPDATE " . DB_PREFIX . "customer SET cart = '' WHERE customer_id = '" . (int)$this->customer->getId() . "'");
          }

Мне помогло. 

За что deeman огромное спасибо!

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


  • 4 months later...
  • 7 months later...

Этот способ начинает работать для новых заказов?

У одного клиента, в корзине до сих пор старый заказ, количество позиций очень большое, по одному удалить нереально. Как всем клиентам очистить корзину ?

1.5.5

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


  • 1 year later...
В 27.05.2014 в 20:54, hmade сказал:

вариант предложенный deeman разработчиком модуля Simple - упрощенная регистрация и заказ 4.1.4

 

в файле

\system\library\customer.php

есть


$this->db->query("UPDATE " . DB_PREFIX . "customer SET cart = '" . $this->db->escape(isset($this->session->data['cart']) ? serialize($this->session->data['cart']) : '') . "', wishlist = '" . $this->db->escape(isset($this->session->data['wishlist']) ? serialize($this->session->data['wishlist']) : '') . "', ip = '" . $this->db->escape($this->request->server['REMOTE_ADDR']) . "' WHERE customer_id = '" . (int)$this->customer_id . "'");

его надо заменить на


$this->db->query("UPDATE " . DB_PREFIX . "customer SET cart = '" . $this->db->escape(!empty($this->session->data['cart']) ? serialize($this->session->data['cart']) : '') . "', wishlist = '" . $this->db->escape(isset($this->session->data['wishlist']) ? serialize($this->session->data['wishlist']) : '') . "', ip = '" . $this->db->escape($this->request->server['REMOTE_ADDR']) . "' WHERE customer_id = '" . (int)$this->customer_id . "'");

и в ystem\library\cart.php 

добавить после public function clear() {


if ($this->customer->isLogged()) {
              $this->db->query("UPDATE " . DB_PREFIX . "customer SET cart = '' WHERE customer_id = '" . (int)$this->customer->getId() . "'");
          }

Мне помогло. 

За что deeman огромное спасибо!

 

Мне, вроде как, тоже помогло. Понаблюдаем еще несколько дней.

OcStore 1.5.5.1.1

Змінено користувачем SiteNNPro
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

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

Important Information

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