Magento - 如何使用购物车价格规则显示cms块?

时间:2010-09-27 18:36:08

标签: php model-view-controller oop magento

我想使用购物车价格规则来显示交叉销售消息,而不是设置折扣。

例如,如果购物车中有某件商品,请在交叉销售区域显示促销信息。

详细的,我们有可以单独购买的夹克和裤子。但是当一起购买时,客户可以节省50美元。因此,如果夹克在购物车中,我想要一条消息说“买裤子并节省50美元”,反之亦然。当两者都在购物车中时,已有一条规则可以给予折扣,所以我想提请他们注意折扣。

1 个答案:

答案 0 :(得分:1)

为controller_action_layout_generate_blocks_after创建一个观察者,该方法应如下所示:

注意:这是主要的想法,困难的部分是解析规则,可能更容易在规则描述中添加如下内容: productSku:123; productSku:345 并解析规则说明以查看其中一个购物车产品是否与规则匹配。

public function addPromotionBlock($observer)
{
    $action = $observer->getEvent()->getAction();
    $layout = $observer->getEvent()->getLayout();

    if($action->getRequest()->getControllerName() == 'cart' && $action->getRequest()->getActionName() == 'index') {
        $addPromotion = false;

        $quote = Mage::getSingleton('checkout/cart')->getQuote();
        $items = Mage::getSingleton('checkout/cart')->getQuote()->getAllItems();

        $rules = Mage::getResourceModel('salesrule/rule_collection')
                    ->setValidationFilter(
                        Mage::app()->getStore($quote->getStoreId())->getWebsiteId(), 
                        $quote->getCustomerGroupId(), 
                        $quote->getCouponCode())
                    ->load();


        // see Mage_SalesRule_Model_Validator
        foreach ($items as $item) {
            //check if the rules applies  
            foreach ($rules as $rule) {
                var_dump($rule->toArray());
            }

             //let's say we found a valid rule
            $addPromotion = true; 
        }


        if ($addPromotion) {
            $crosssell = $layout->getBlock('checkout.cart.crosssell');
            if ($crosssell) {
                //set your template here
                $crosssell->setTemplate('checkout/promotion.phtml');
            }
        }
    }        
}