2010-09-27 90 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'); 
      } 
     } 
    }   
} 
相關問題