Способ оплаты фильтров по сравнению с методом доставки
-
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();
Спасибо всем. Теперь мой метод со комбинацией всех ответов выглядит так и работает идеально, поэтому надежда помогает кому -то другому:
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;
}
}
}
}