2013-05-29 39 views
0

我在Magento中開發了基於發貨方式的過濾器付款方式的觀察者方法。這是我的方法: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; 
        } 
       } 

      } 
    } 
} 

這樣做的結果是,對於所有運輸方法而言,此過濾器是正確的。因此,對於所有的運輸方式貝寶和金錢檢查顯示和所有其他沒有。

請教我如何設置這個條件來過濾一種特定的運輸方式。

+1

連我也奮鬥了這一點,但我得到了一個答案在這裏:http://stackoverflow.com/questions/26604267/magento-onepage-checkout-hide-payment-method-depending-on-shipping-方法 – 2015-03-27 10:10:39

回答

1
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(); 
     if ($shipping_method == 'flatrate_flatrate' && $method->getCode() == 'checkmo') { 
      $result->isAvailable = false; 
     } 
    }