0

どのプロモーション/クーポンがどのアイテムを順番に変更したか、割引前のこのアイテムの価格とこのアイテムの最終価格についての情報が必要です。私は知っています、それは複雑なので、ここに例があります:

<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>

わかりやすい説明だといいのですが。すべての助けをありがとう。

編集:私は1つのことを忘れました。私が持っているのは、販売/注文モデルからの情報だけです。これはインターフェースなので、セッションデータにアクセスできません。データベースから検証済みの注文を取得します。

4

1 に答える 1

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プロパティをチェックして、適切なエクスポートファイルを作成するためのプロモーションのタイプに関する情報を取得します。

于 2012-08-09T09:13:47.493 に答える