【问题标题】:Cash On Delivery Based On Zipcode Magento 1.9基于邮政编码 Magento 1.9 的货到付款
【发布时间】:2017-01-11 11:23:33
【问题描述】:

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

此扩展程序与 Magento 中内置的货到付款付款方式完美配合。

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

我希望 COD 选项最初在未输入邮政编码时可见,并且在客户输入邮政编码后,如果该邮政编码不可用,则应显示一条消息,说明 COD 不可用。

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

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;
                }
            }
        }
    }
}

【问题讨论】:

    标签: php magento-1.9


    【解决方案1】:

    您可以简单地检查是否未添加邮政编码,例如:

    之后

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

    添加

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-28
      • 2014-06-08
      • 2013-06-05
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 2012-12-10
      • 2017-12-07
      相关资源
      最近更新 更多