3

特定の機会に見積もりの​​送料無料を設定する必要があるモジュールをプログラミングしています。私はこれを機能させようとしています:

$quote = Mage::helper('checkout/cart')->getCart()->getQuote();
$quote->getShippingAddress()->setFreeShipping(1);

しかし、これまでのところ成功していません。誰でも助けることができますか?

編集:次のイベントでこれを行う必要があります:

checkout_cart_update_items_after
checkout_cart_product_add_after
sales_quote_remove_item

基本的に、カートに変更があった場合、送料を無料にするかどうかを判断する必要があります。

編集:これはかなりうまくいくようです。チェックアウトの選択肢として送料無料を無効にする必要がある場合を除きます。

$address = $quote->getShippingAddress();
$address->setShippingMethod('freeshipping_freeshipping');
4

4 に答える 4

3

Mage_SalesRule_Model_Quote_Freeshippingこれを行う最善の方法は、SalesRule モジュールでクラスごとに行うのと同じ方法で、独自の「見積もりアドレス合計」を追加すること です。これを複製するには、拡張クラスを作成し、その中に次のようなMage_Sales_Model_Quote_Address_Total_Abstract名前のメソッドを作成する必要があります。collect()

class Mycompany_Mymod_Model_Sales_Quote_Address_Total_Freeshipping extends Mage_Sales_Model_Quote_Address_Total_Abstract
{
    public function collect(Mage_Sales_Model_Quote_Address $address)
    {
        parent::collect($address);
        if(somecondition){
            $address->setFreeShipping(true);
        }
    }
}

次に、モジュール config.xml でカスタムの「見積もりアドレス合計」を宣言します。

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <global>
        <sales>
            <quote>
                <totals>
                    <customfreeshipping>
                        <class>mymodname/sales_quote_address_total_freeshipping</class>
                        <after>freeshipping</after> <!-- this ensures our custom total is placed after Mage_SalesRule_Model_Quote_Freeshipping so we can override "$address->setFreeShipping(0);" -->
                    </customfreeshipping>
                </totals>
            </quote>
        </sales>
    </global>
</config>

$request->setFreeShipping($this->getFreeShipping());これにより、メソッドMage_Sales_Model_Quote_Address内のクラスでリクエスト オブジェクトに渡されるアドレス オブジェクトの送料無料が宣言され、requestShippingRates()チェックしているすべての配送モジュールで利用できるようになります$request->getFreeShipping()

楽しみ :)

于 2015-11-09T17:04:15.407 に答える
1

見積もりを保存するだけではダメですか?

$quote = Mage::helper('checkout/cart')->getCart()->getQuote();
$quote->getShippingAddress()->setFreeShipping(1);
$quote->save();
于 2013-05-13T11:36:30.237 に答える
0

次のMagento 2エラーが発生しました

配送方法を指定してください

そして、このコードは問題を解決します:

$shippingAddress->setCollectShippingRates(true)
                ->collectShippingRates()
                ->setShippingMethod('flatrate_flatrate');

Unable to set Shipping Method in Magento order create scriptの適切な解決策も確認してください

于 2016-10-05T12:43:13.553 に答える