配送方法に基づいて支払い方法をフィルタリングします
-
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;
}
}
}
}
}
この結果、すべての配送方法でこのフィルタが true になります。したがって、すべての配送方法で Paypal と Money Check は表示されますが、その他の配送方法では表示されません。
特定の配送方法のみをフィルタリングするためにこの条件を設定する方法を教えてください。
解決
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;
}
}
}
}
所属していません magento.stackexchange