#magento
#magento
Вопрос:
Если вы вошли в Magento и добавили некоторые товары в свою корзину, а затем покинули сайт, они будут сохранены для следующего вашего возвращения на сайт.
Это, однако, вызывает проблему при возврате. Если по возвращении вы добавили товар в свою корзину без входа в систему, а затем вошли в систему в начале процесса оформления заказа, ваша гостевая и сохраненная корзина будут объединены. Это нежелательно.
Есть ли какой-либо способ заставить Magento очистить сохраненную корзину при входе в систему, если в вашей текущей корзине есть элементы?
Ответ №1:
Похоже, что код, который управляет этим, находится в Mage_Checkout_Model_Session
, конкретно там, где он вызывает Mage_Sales_Model_Quote::merge
. Это означает, что у вас есть несколько вариантов.
- Переопределите класс сеанса и заставьте его не вызывать слияние.
- Переопределите класс quote и заставьте его никогда не объединять корзины. В этом подходе могут быть вторичные ошибки, если другие части системы также пытаются объединить корзины.
- Подключитесь к событию, которое вызывает 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)