Magento запрещает смешивать и сочетать продукты в корзине
Я продаю предварительные заказы в моем магазине. И по причинам бухгалтерского учета я не могу позволить клиентам покупать как обычные товары, так и товары с предварительным заказом в одном и том же порядке. Все предварительные заказы имеют атрибут "предзаказ", установленный на "Да". Итак, теперь мне нужно запретить своим клиентам размещать обычные продукты вместе с продуктами предварительного заказа в одной корзине. Желательно сгенерировать сообщение "Нельзя смешивать обычные продукты с продуктами предварительного заказа", когда клиенты пытаются сделать именно это. Есть идеи, как этого добиться?
1 ответ
Вы можете использовать наблюдателя, чтобы сделать свою работу. К сожалению, у Magento нет события, которое нужно запустить, прежде чем пользователь добавит что-то в корзину. Таким образом, сам Magento на самом деле использует checkout_cart_product_add_after
событие. Итак, создайте следующий модуль:
Приложение / код / местные /My/EventListener / и т.д. /config.xml
<?xml version="1.0"?>
<config>
<modules>
<My_Eventlistener>
<version>1.0.0</version>
</My_Eventlistener>
</modules>
<global>
<models>
<my_eventlistener>
<class>My_Eventlistener_Model</class>
</my_eventlistener>
</models>
</global>
<frontend>
<events>
<checkout_cart_product_add_after>
<observers>
<my_checkout_cart_product_add_afte>
<class>my_eventlistener/observer</class>
<method>checkoutCartProductAddAfter</method>
</my_checkout_cart_product_add_after>
</observers>
</checkout_cart_product_add_after>
</events>
</frontend>
</config>
приложение / и т.д. / модули /My_Eventlistener.xml
<?xml version="1.0"?>
<config>
<modules>
<My_Eventlistener>
<active>true</active>
<codePool>local</codePool>
</My_Eventlistener>
</modules>
</config>
Приложение / код / местные /My/EventListener / Модель /Observer.php
<?php
class My_Eventlistener_Model_Observer
{
public function checkoutCartProductAddAfter() {
$quoteItem = $observer->getEvent()->getQuoteItem();
$product = $observer->getEvent()->getProduct();
$quote = $quoteItem->getQuote();
//Flag that becomes true if he has mixed products.
$he_has_mixed_products = false;
/*
* Check here if he has mixed products in his cart
*/
if( $he_has_mixed_products )
$quote->removeItem($quoteItem->getId());
Mage::throwException('You cannot mix regular products with pre order products!');
}
}
}