3

解決策が見つからない問題があります。注文の小計が $75 を超える場合は送料無料にするというショッピング カートのルールがあります。ただし、割引コードを使用すると、注文の合計金額が $75 未満であるにもかかわらず、このルールが再び適用されます。税金やその他の手数料はかかりません。75 ドル以上の買い物をした場合にのみ、送料を無料にしたいと考えています。どうすればこれを解決できますか?前もって感謝します

4

3 に答える 3

6

そうです、ショッピングカートのルールは、送料無料の運送業者モデルと同様に、カートの小計でのみ機能します。小さな書き直しを使用して、フリーシップモデルの動作を変更することができます。

まず、送料無料を許可するショッピングカートルールを無効にします。次にSystem > Configuration > Shipping Methods、送料無料の運送業者にアクセスしてアクティブ化し、75ドルの「最小注文額」を与えます。

次に、リライトを追加して、送料無料モデルが小計ではなく割引価値を使用するようにする必要があります。

適切なモジュール登録ファイルを使用して、モジュールMy_Shippingを追加します。あなたはstackoverflowについて質問しているので、Magentoモジュールの作成に精通していると思います。My/Shipping/etc/config.xml次に、次の書き換え宣言を使用し てファイルを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <global>
        <models>
            <shipping>
                <rewrite>
                    <carrier_freeshipping>My_Shipping_Model_Freeshipping</carrier_freeshipping>
                </rewrite>
            </shipping>
        </models>
    </global>
</config>

現在欠けているのは、書き直されたキャリアモデルだけです。次のコードは、必要な変更を実装します。

class My_Shipping_Model_Freeshipping extends Mage_Shipping_Model_Carrier_Freeshipping
{
    /**
     * Force the original free shipping class to use the discounted package value.
     *
     * The package_value_with_discount value already is in the base currency
     * even if there is no "base" in the property name, no need to convert it.
     *
     * @param Mage_Shipping_Model_Rate_Request $request
     * @return Mage_Shipping_Model_Rate_Result
     */
    public function collectRates(Mage_Shipping_Model_Rate_Request $request)
    {
        $origBaseSubtotal = $request->getBaseSubtotalInclTax();
        $request->setBaseSubtotalInclTax($request->getPackageValueWithDiscount());
        $result = parent::collectRates($request);
        $request->setBaseSubtotalInclTax($origBaseSubtotal);
        return $result;
    }
}

それでおしまい。現在、割引を含む小計が75ドルを超える場合は、送料無料の方法を利用できます。そうしないと、顧客には表示されません。

于 2012-07-11T07:21:34.413 に答える
1

残念ながら、私が気付いたバグです。割引前の値に基づいて小計を計算します。これを回避する方法は、割引コード ルールに「処理ルールの停止」を設定することです。

于 2012-07-09T19:34:33.103 に答える