4

初期条件:

  • Magento 1.7がインストールされています(以前のバージョンでは試していません)
  • 複数のダウンロード可能なファイルを含む 1 つの (ダウンロード可能な) 製品で、既定の製品に価格が追加されています (たとえば、50 ドルの製品+ 2 つのダウンロード可能なファイル、1 つは無料、もう 1 つは追加の50 ドル)
  • すべての製品に適用される新しいプロモーション (カタログ価格ルール) ( -20%としましょう)

プロモーションに関する詳細情報:

すべての製品、すべてのグループに適用され、アクティブで適用され、「元の価格のパーセンテージで」適用され、サブ製品の割引を有効にします -> はい、処理のルールを停止します -> いいえ

期待される結果:

50$ ファイルの製品の価格: 80$ (100$ から 80%)

実結果:

50 ドルのファイルを含む製品の価格: 90 ドル(最初の 50 ドルの 80%、およびダウンロード可能なファイルの全額)。

結論:

このプロモーションは、ダウンロード可能なファイルの追加料金には適用されません。

質問:

  • これは、ダウンロード可能なファイルの望ましい動作ですか? それともこれはバグですか?
  • コードを変更して(最終的にモジュールを作成して)期待どおりに動作させる方法に関するヒントはありますか?(単なるヒント、つまり何を拡張するか)
4

2 に答える 2

1

リンク/ダウンロード可能なファイルは製品エンティティではありません (したがって、 price_index テーブルがなく、製品として扱われません)

製品にプロモーションを適用するには 2 つの方法があります

  1. カタログ価格ルール

  2. ショッピングカートの価格ルール

あなたの質問はカタログ価格ルールを使用したと述べたので、私はカタログ価格ルールを使用してあなたの質問を解決しました.

モジュールを作成してモデルを書き換える

Mage_Downloadable_Model_Product_Type

======

<global>
    <models>
        <downloadable>
            <rewrite>
                <product_type>Web_Eproduct_Model_Downloadable_Product_Type</product_type>
            </rewrite>
        </downloadable>
    </models>
</global>

以下のコードは、各リンクの価格をオンザフライで計算します (同じ製品に複数のルールが適用されている場合でも)。

class Namespace_Modulename_Model_Downloadable_Product_Type extends Mage_Downloadable_Model_Product_Type {
    public function getLinks($product = null)
    {
        $product = $this->getProduct($product);
        $wId = Mage::app()->getWebsite()->getId();
        $gId = Mage::getSingleton('customer/session')->getCustomerGroupId();
        $catalogRules = Mage::getSingleton('catalogrule/resource_rule')->getRulesFromProduct('',$wId,$gId,$product->getId());

        /* @var Mage_Catalog_Model_Product $product */
        if (is_null($product->getDownloadableLinks())) {
            $_linkCollection = Mage::getModel('downloadable/link')->getCollection()
                ->addProductToFilter($product->getId())
                ->addTitleToResult($product->getStoreId())
                ->addPriceToResult($product->getStore()->getWebsiteId());
            $linksCollectionById = array();
            foreach ($_linkCollection as $link) {
                /* @var Mage_Downloadable_Model_Link $link */

                $link->setProduct($product);

                $link->setPrice($this->calcLinkPrice($catalogRules,$link->getPrice()));
                $linksCollectionById[$link->getId()] = $link;
            }
            $product->setDownloadableLinks($linksCollectionById);
        }
        return $product->getDownloadableLinks();
    }
    public function calcLinkPrice(array $rules = array(),$productPrice = 0 )
    {
        foreach($rules as $ruleData)
        {
            $productPrice = Mage::helper('catalogrule')->calcPriceRule(
                $ruleData['action_operator'],
                $ruleData['action_amount'],
                $productPrice);
        }
        return $productPrice;
    }
}

私はそれをテストし、期待どおりに動作することを確認しました:)

試してみて、あなたの考えを教えてください:)

ショッピング カートの価格ルールを使用する場合、これを実現する別の方法があります。後で投稿します。

于 2013-04-20T20:40:57.210 に答える