構成可能製品の関連製品をカタログ価格ルールから除外します


8

関連する構成可能な製品の単純な製品をカタログ価格ルールから除外しようとしています。これをすべて行う理由は、すでにスーパー属性の構成セクションに-priceを追加しているため、この特定の製品にこれ以上割引を適用したくないからです。 。

catalogrule_productテーブルに保存する製品を除外しようとしましたが、このテーブルは関連する製品を保存していないため、構成可能な製品IDを保存し、それを使用して価格を計算しています。

また、configurable.phpのいくつかの条件を試しましたが、まだ運がありません。

私はこれをするために汚い方法を使いたくありません。これをスマートに行う方法を教えてください。


1
カタログルール>アクションでオプション「サブプロダクトへの割引を有効にする」を「いいえ」に設定すると役立ちますか?
Rakesh Shewale 2014

いいえ、機能しません。
Jitendra 2014

回答:


2

Magentoはデフォルトでこれをサポートしていません。代わりに、Mage_SalesRule_Model_Validatorをオーバーライドして、販売ルールの書き換えを作成しました。その中で、関連する製品が販売ルールに一致するかどうかを確認します。

app / code / local / AAA / SalesRule / etc / config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <AAA_SalesRule>
            <version>0.1.0</version>
        </AAA_SalesRule>
    </modules>
    <global>
        <models>
            <aaa_salesrule>
                <class>AAA_SalesRule_Model</class>
            </aaa_salesrule>
            <salesrule>
                <rewrite>
                    <validator>AAA_SalesRule_Model_SalesRule_Validator</validator>
                </rewrite>
            </salesrule>
        </models>
    </global>
</config>

app / code / local / AAA / SalesRule / Model / SalesRule / Validator.php

private function _hasChildInCart($product) {
        $quote = Mage::getSingleton('checkout/session')->getQuote();
        $childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null, $product);
        $childrenIds = $this->_getChildrenIds($childProducts);

        foreach ($quote->getAllItems() as $item) {
            if (in_array($item->getProductId(), $childrenIds)) {
                $registeredItem = Mage::registry('rule_config_product_' . $product->getId());
                if ($registeredItem != null && $registeredItem->getId() != $item->getId()) {
                    Mage::unregister('rule_config_product_' . $product->getId());
                }
                if ($registeredItem == null) {
                    Mage::register('rule_config_product_' . $product->getId(), $item);
                }
                return true;
            }
        }
        return false;
    }

    private function _getChildrenIds($childProducts) {
        $childrenIds = array();
        foreach ($childProducts as $child) {
            $childrenIds[] = $child->getId();
        }

        return $childrenIds;
    }

1

「スーパー製品の属性」セクションを使用して、関連製品のデフォルトの価格を上げることができます。関連製品の価格は引き続き管理パネルに表示されます。ストアから、固定金額または構成可能製品のデフォルト価格のパーセンテージとして新しい価格を入力しない限り、アイテムの値はゼロになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.