我根据运输方法开发了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;
                }
            }

         }
    }
}

结果是,对于所有运输方法,此过滤器都是正确的。因此,对于所有运输方法,贝宝和货币支票都显示出来,所有其他都没有。

请给我建议如何设置此条件以过滤仅用于一种特定的运输方法。

有帮助吗?

解决方案

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---------------------------the-the-user-has-chosen-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归因
scroll top