Question

je développe la méthode d'observation dans Magento pour les méthodes de paiement des filtres basés sur des méthodes d'expédition. Ceci est ma méthode:

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

         }
    }
}

Les résultats de cette est que pour tout mode d'expédition ce filtre est vrai. Donc, pour tous les mode d'expédition paypal et contrôle de l'argent montre et tous les autres non.

S'il vous plaît des conseils moi comment mettre en place cette condition filtre juste pour une méthode d'expédition spécifique.

Était-ce utile?

La solution

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

Autres conseils

Je ne suis pas personne à 100% sûr de ce que vous essayez d'accomplir, mais ne devrait pas vous vérifieront la méthode d'expédition contre l'ordre actuel au lieu de la liste globale de tous les transporteurs.

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

Au lieu de

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

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

Merci à tous. Maintenant, ma méthode avec une combinaison de toutes les réponses qui ressemble et fonctionne parfaitement si l'espoir aide à quelqu'un d'autre:

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

             }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top