Как остановить Magento слияния корзины при входе в систему?

Если вы должны были войти в Magento и добавить некоторые продукты в свою корзину, а затем покинуть сайт, они будут сохранены в следующий раз, когда вы вернетесь на сайт.

Это, однако, вызывает проблему, когда вы возвращаетесь. Если по возвращении вы добавили продукт в свою корзину без входа в систему, а затем вошел в систему в начале процесса проверки, ваш гость и сохраненная корзина будут объединены. Это нежелательно.

Есть ли способ сделать Magento очистить сохраненную корзину при входе в систему, если в вашей текущей корзине есть элементы?

Заранее спасибо

Ответ 1

Похоже, что код, который определяет это, находится в Mage_Checkout_Model_Session, особенно там, где он вызывает Mage_Sales_Model_Quote::merge. Это означает, что у вас есть несколько вариантов.

  • Переопределить класс сеанса и заставить его не вызывать слияние.
  • Переопределить класс кавычек и не допустить слияния телег. Могут быть вторичные ошибки для этого подхода, если другие части системы также пытаются объединить тележки.
  • Подключитесь к событию, которое вызывает призывы (sales_quote_merge_before), и используйте эту возможность для опорожнения одной из телег. Вам нужно будет обнаружить, когда это будет сделано, но оно намного чище, чем два других.

Сообщите мне, если это не понятно. Надеюсь, что это поможет!

Спасибо, Джо

Ответ 2

спасибо Джозефу Масти, ваш комментарий очень помог мне, я сделал для события/наблюдателя, я использовал событие описаний, а затем я удалил цитату следующим образом:

 public function emptyCartUserNoLogged($observer){
    $event = $observer->getEvent();

    $quote = $event->getSource();

    $quote->setIsActive(false);

    $quote->delete();

 }

Большое спасибо за вашу помощь.

Ответ 3

Я изменил Quote.php(/Sales/Model/) в строке 1344 в функции слияния следующим образом.

foreach ($this->getAllItems() as $item) {
        $this->removeItem($item->getId());
    }