我需要了解哪个促销/优惠券改变了订单中的哪个商品,以及该商品在折扣前的价格是多少以及该商品的最终价格。我知道,这很复杂,所以这是一个例子:
<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>
我希望这是可以理解的解释。感谢您的帮助。
编辑:我忘记了一件事。我所拥有的都是来自销售/订单模型的信息。它是一个接口,所以我无法访问会话数据,我从数据库获取经过验证的订单。
您可以轻松地从订单项目模型中检索应用的购物车规则 ID。
您需要遍历订单商品来收集所有应用于商品的规则 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()]);
}
}
然后加载规则集合,检索规则信息并将其分配给订单商品。
$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);
}
}
导出数据时,只需检查订单项的 getAppliedRules 属性即可获取有关促销类型的信息,以便构建正确的导出文件。