2010-09-27 83 views
2

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

例如,如果某个物品在购物车中,则在交叉销售区域显示促销消息。

具体来说,我们有夹克和裤子,可以单独购买。但是当一起购买时,顾客可以节省50美元。所以,如果夹克在购物车中,我想要一条消息说“买裤子,节省50美元”,反之亦然。当两个人都在购物车中时,已经有一个规则可以给予折扣,所以我想让他们注意折扣。

回答

1

创建controller_action_layout_generate_blocks_after观察员,该方法应该是这个样子:

注:这是主要的想法,困难的部分是解析规则,恐怕它更容易在规则说明中添加一些如: productSku:123;并且解析规则描述以查看购物车产品之一是否与规则匹配。

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'); 
      } 
     } 
    }   
} 
相关问题