Magento禁止在购物车中混合搭配产品

时间:2016-04-02 07:28:41

标签: magento magento-1.9 magento-1.9.2.1 magento-dev

我在我的商店里卖预订单。出于记账原因,我不能让客户以相同的顺序购买常规产品和预购产品。 所有预订都具有属性" preorder"设为是。 所以,现在我需要禁止我的客户将普通产品和预订产品放在同一个购物车中。优选通过生成"您不能将常规产品与预订产品混合"当客户试图做到这一点时的消息。 知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

您可以使用观察员来完成您的工作。不幸的是,Magento没有在用户向购物车添加内容之前触发事件。所以Magento本身实际上使用了checkout_cart_product_add_after事件。因此,创建以下模块:

  

应用程序/代码/本地/我/事件监听的/ etc / 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>
  

应用程序的/ etc /模块/ My_Eventlistener.xml

<?xml version="1.0"?>
<config>
    <modules>
        <My_Eventlistener>
            <active>true</active>
            <codePool>local</codePool>
        </My_Eventlistener>
    </modules>
</config>
  

应用程序/代码/本地/我/事件监听/型号/ 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!');
        }
    }

}