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!');
        }
    }

}
Другие вопросы по тегам