Filtro Pago Método basado en el Método de envío
-
16-10-2019 - |
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.
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();
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;
}
}
}
}