質問

配送方法に基づいて支払い方法をフィルターするために、Magento でオブザーバー メソッドを開発しています。これが私の方法です:

class Devpassion_Paymentfilter_Model_Observer {

public function paymentMethodIsActive(Varien_Event_Observer $observer) {
$event           = $observer->getEvent();
$method          = $event->getMethodInstance();
$result          = $event->getResult();
$carriers = Mage::getSingleton('shipping/config')->getActiveCarriers();

    foreach ($carriers as $carrier) {
 //       $carrierCode = $carrier->getId();

        if ($carrier->getId() == 'flatrate' ){
                if($method->getCode() == 'checkmo' OR $method->getCode() == 'paypal_standard'){
                    $result->isAvailable = true;
                }else{
                    $result->isAvailable = false;
                }
            }

         }
    }
}

この結果、すべての配送方法でこのフィルタが true になります。したがって、すべての配送方法で Paypal と Money Check は表示されますが、その他の配送方法では表示されません。

特定の配送方法のみをフィルタリングするためにこの条件を設定する方法を教えてください。

役に立ちましたか?

解決

public function paymentMethodIsActive($observer)
    {
        /**
         * @var $quote Mage_Sales_Model_Quote
         */
        $quote  = $observer->getEvent()->getQuote();
        $method = $observer->getEvent()->getMethodInstance();
        $result = $observer->getEvent()->getResult();

        $shipping_method = $quote->getShippingAddress()->getShippingMethod(); //selected shipping method
        if ($shipping_method == 'flatrate_flatrate' && $method->getCode() == 'checkmo') {
            $result->isAvailable = false;
        }
    }

他のヒント

私はあなたが何を達成しようとしているのか100%確信しているわけではありませんが、全配送業者のグローバルリストではなく、現在の注文と照らし合わせて配送方法をチェックするべきではないでしょうか。

Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingMethod()

の代わりに

$carriers = Mage::getSingleton('shipping/config')->getActiveCarriers();

見る https://stackoverflow.com/questions/6032936/how-do-i-get-the-shipping-method-the-user-has-chosen-during-checkout

ありがとうございます。すべての答えを組み合わせた私の方法は次のようになり、完璧に機能するので、他の人に役立つことを願っています。

class Devpassion_Paymentfilter_Model_Observer {

public function paymentMethodIsActive(Varien_Event_Observer $observer) {


    $event           = $observer->getEvent();
    $method          = $event->getMethodInstance();
    $result          = $event->getResult();
    $carriers = Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingMethod();

            if ($carriers == 'flatrate_flatrate' ){
                    if($method->getCode() == 'checkmo' OR $method->getCode() == 'paypal_standard'){
                        $result->isAvailable = true;
                    }else{
                        $result->isAvailable = false;
                    }
                }

             }
}
ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top