基于Zipcode Magento 1.9的货到付款

时间:2017-01-11 11:23:34

标签: php magento-1.9

以下是扩展程序的observer.php文件,该扩展程序在结帐页面上限制基于Pincode的货到付款付款方式。

此扩展程序与Magento内置的现金交付付款方式完美匹配。

我的问题是,当我网站上的客户进入结帐页面完成订单时,货到付款方式最初不可见。只有当客户输入他的邮政编码,并且如果该特定邮政编码可用于COD时,才会显示COD付款方式。如果该邮政编码不符合条件,则COD选项仍然不可见。

我希望在未输入邮政编码时以及在客户输入邮政编码后最初可以看到COD选项,如果该邮政编码不可用,则应显示一条消息,说明COD不可用。< / p>

我知道这个特殊的代码需要稍微修改才能实现。如果可能,请帮助我。

Observer.php

class Mfp_Cod_Model_Observer {

    public function getCashOnDelvery(Varien_Event_Observer $observer)
    {
        $event           = $observer->getEvent();
        $method          = $event->getMethodInstance();
        $result          = $event->getResult();
        $isModuleEnable = Mage::getStoreConfig('cod/cod/enable');

        if ($isModuleEnable) {
            if ($method->getCode() == 'msp_cashondelivery' ) {
                $quote = Mage::getSingleton('checkout/cart')->getQuote();
                $add = $quote->getShippingAddress();
                $postcode = $add->getData('postcode');

                $comparisonMode = Mage::getStoreConfig('cod/cod/mode');
                $zipCodes = Mage::getStoreConfig('cod/cod/zipcode');
                $isExist = false;

                if (trim($zipCodes) == '') {
                    $result->isAvailable = true;
                } else {
                    if(strpos($zipCodes, $postcode) !==  false) {
                        $isExist = true;
                    }

                    if ($isExist != true) {
                        $zipCodesArray = explode(',', nl2br($zipCodes));
                        if (count($elementLineArray) > 1) {
                            foreach ($zipCodesArray as $codzipLine) {
                                $elementLineArray = explode('-', $codzipLine);
                                if (count($elementLineArray) == 2 && ( $postcode >= $elementLineArray[0] && $postcode <= $elementLineArray[1] )) {
                                    $isExist = true;
                                    break;
                                } else if($postcode == $codzipLine) {
                                    $isExist = true;
                                    break;
                                }
                            }
                        }
                    }
                    $returnValue = '';
                    $returnValue = ($isExist)?true:false;

                    $result->isAvailable = $returnValue;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您只需检查是否添加了zipcode,如:

$postcode = $add->getData('postcode');

添加

if(!isset($postcode) || empty($postcode)) {
    return true;
}

为了获取结帐页面的送货地址

$address = $observer->getEvent()->getOrder()
                              ->getShippingAddress();

在$ address对象中,您将获得包含邮政编码的送货地址的完整信息。