Способ оплаты фильтров по сравнению с методом доставки

magento.stackexchange https://magento.stackexchange.com/questions/4225

  •  16-10-2019
  •  | 
  •  

Вопрос

Я разрабатываю метод наблюдателя в 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;
                }
            }

         }
    }
}

Результаты этого заключаются в том, что для всех методов доставки этот фильтр верен. Таким образом, для всех методов доставки PayPal и проверка денег появляются, а все остальные нет.

Пожалуйста, посоветуйте мне, как настроить это условие, чтобы фильтровать только для одного конкретного метода доставки.

Это было полезно?

Решение

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-comewendge-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