显示某些特定城市的货到付款方式

时间:2015-04-08 15:29:56

标签: magento

如何显示/隐藏某些特定城市的“货到付款”付款方式。

我已经厌倦了这个link但是没有工作

这是我的observer.php,位于app / code / local / MagePsycho / Paymentfilter / Model

class MagePsycho_Paymentfilter_Model_Observer {

    public function paymentMethodIsActive(Varien_Event_Observer $observer) {
        $event           = $observer->getEvent();
        $method          = $event->getMethodInstance();
        $result          = $event->getResult();
        $currencyCode    = Mage::app()->getStore()->getCurrentCurrencyCode();

        $checkout = Mage::getSingleton('checkout/session')->getQuote();
        $shipping = $checkout->getShippingAddress();

        $cashOnDeliveryCities = array('test1','test3');

        if(in_array($shipping->getCity(), $cashOnDeliveryCities)){
            $result->isAvailable = true;
        }else{
            $result->isAvailable = false;
        }   

    }

}

这是我的app.php,位于app / code / local / MagePsycho / Paymentfilter / etc

<frontend>

    <events>
        <payment_method_is_active>
            <observers>
                <paymentfilter_payment_method_is_active>
                    <type>singleton</type>
                    <class>paymentfilter/observer</class>
                    <method>paymentMethodIsActive</method>
                </paymentfilter_payment_method_is_active>
            </observers>
        </payment_method_is_active>
    </events>

</frontend>

我失踪的地方,显示所有未过滤的城市的货到付款

由于

1 个答案:

答案 0 :(得分:1)

它对我有用。

首先检查您的观察者方法是否正在执行。放一些像exit()或die();

正如您已经说过的,您只想为cash_on_delivery添加城市限制 - 在$currencyCode = ...之后添加以下代码

    if(!($method instanceof Mage_Payment_Model_Method_Cashondelivery))
    {
        return;
    }

尝试调试Mage_Payment_Model_Method_Abstract :: isAvailable。把一些Mage :: log放在这个方法中,并确定哪个walue有$checkResult->isAvailable