Pregunta

Me desarrollan método de observador en Magento para los métodos de pago de filtros basados ??en el envío de los métodos. Este es mi método:

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;
                }
            }

         }
    }
}

Los resultados de esto es que para todos método de envío de este filtro es cierto. Así que para todos paypal método de envío y verificación de dinero aparece y todos los demás no.

Por favor, consejos me cómo configurar esta condición de filtro para el método de envío de uno específico.

¿Fue útil?

Solución

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;
        }
    }

Otros consejos

No estoy 100% seguro de la persona en lo que usted está tratando de lograr, pero ¿No deberías estar revisando el método de envío contra el orden actual en lugar de la lista global de todas las portadoras.

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

En lugar de

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

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

Gracias a todos. Ahora mi método con la combinación de todas las miradas respuestas como eso y funciona perfecto, así esperanza ayuda a otra persona:

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;
                    }
                }

             }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top