2012-08-09 83 views
0

我需要哪些促銷/優惠券更改哪些項目的順序和這個項目的價格之前折扣和該項目的最終價格的信息。我知道,它的複雜,所以這裏有一個例子:Magento訂單的折扣信息

<order> 
<items> 
<item> <!-- This item have discount in order --> 
<sku>1234</sku> 
<promotion> 
<promo_id>456</promo_id> 
<discount_value>10</discount_value><!-- In % or $ --> 
</promotion> 
<final_price>25</final_price> 
</item> 
<item><!-- This item don't have discount in order --> 
<sku>1234</sku> 
<promotion/> 
<final_price>35</final_price> 
</item> 
</items> 
</order> 

我希望這是可以理解的解釋。感謝所有幫助。

編輯:我忘了一件事。我所有的信息都來自銷售/訂單模型。這是一個接口,所以我沒有訪問會話數據,我從數據庫獲得驗證的訂單。

回答

8

您可以輕鬆從訂單商品模型中檢索應用的購物車規則ID。

  1. 你需要走,但爲了項目收集所有適用規則ID項:

    $collectedRuleIds = array(); 
    $itemRules = array(); 
    foreach ($order->getAllVisibleItems() as $orderItem) { 
        if ($orderItem->getAppliedRuleIds()) { 
         $itemRules[$orderItem->getId()] = explode(',', $orderItem->getAppliedRuleIds()); 
         $collectedRuleIds = array_merge($collectedRuleIds, $itemRules[$orderItem->getId()]); 
        } 
    } 
    
  2. 然後加載規則集,檢索規則信息並將其分配給訂單項目。

    $rules = false; 
    if ($collectedRuleIds) { 
        $rules = Mage::getModel('salesrule/rule')->getCollection()->addFieldToFilter('rule_id', array('in' => $collectedRuleIds)); 
    } 
    
    if ($rules) { 
        foreach ($itemRules as $itemId => $ruleIds) { 
         $orderItem = $order->getItemById($itemId); 
         $appliedRules = array(); 
         foreach ($ruleIds as $ruleId) { 
          if ($rules->getItemById($ruleId)) { 
           $appliedRules[] = $rules->getItemById($ruleId); 
          } 
         } 
         $orderItem->setAppliedRules($appliedRules); 
        } 
    } 
    
  3. 在導出數據,只是檢查訂單項目的getAppliedRules屬性來獲取關於類型的促銷信息,建立適當的導出文件。

+0

爲什麼AllVisibleItems()no AllItems()?有什麼不同? – 2012-08-09 11:09:40

+0

所有商品都會返回產品,包括兒童產品。如果您不希望導出可配置產品作爲單獨的項目很簡單,則不確定是否需要它們。 – 2012-08-09 13:03:34