Как мне остановить Magento, объединяющий корзину при входе в систему?

#magento

#magento

Вопрос:

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

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

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

Ответ №1:

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

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

Комментарии:

1. Гениально! Я пошел с # 3 и запустил модуль observer, чтобы очистить сохраненную корзину, если пользователь входит в систему из кассы, а в несохраненной корзине есть товары.

2. @PhilLavin Меня интересует некоторый код, если вы не возражаете. Я просматривал код вверх и вниз, а затем немного по коду, но все еще не могу сделать это правильно.

3. Это работает в сообществе, но не на предприятии, на момент публикации этого — github.com/jacquesbh/jbh_cartmerge

4. @Ashfame мы видим проблемы с модулем из github в Magento 1.9.0.1 — вы нашли другое решение?

Ответ №2:

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

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

Ответ №3:

Существует расширение Magento, которое предотвращает объединение корзин: https://github.com/jacquesbh/jbh_cartmerge

Он использует sales_quote_merge_before событие, в котором он удаляет элементы предложения из корзины клиента.

Ответ №4:

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

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

    $quote = $event->getSource();

    $quote->setIsActive(false);

    $quote->delete();

 }
  

Комментарии:

1. Привет. Можете ли вы выполнить git или кратко показать нам свой код, который может помочь мне в одной из проблем, с которыми я сталкиваюсь в настоящее время.

2. было бы неплохо, если бы вы могли поделиться полным кодом (mage 1.9.0.1)