我正在使用CE 1.9.2.2为多网站配置。

我正在尝试在送货模块中解析错误,限制某些胶片。

模块在前端侧工作正常,但不幸的是,如果从管理面板创建订单,或者我尝试向订单添加注释,它会失败。

后调试后,我发现观察者无法从送货地址获取邮政编码。

config.xml

<events>
  <sales_order_save_before>
    <observers>
      <sales_order_save_before_handler>
        <type>model</type>
        <class>shippingrestriction/observer</class>
        <method>Shippingzip</method>
        <args></args>
      </sales_order_save_before_handler>
    </observers>
  </sales_order_save_before>
</events>
.

Ogeerver.php

public function Shippingzip(Varien_Event_Observer $observer)
        {
            $collection = Mage::getModel('shippingrestriction/shippingzip')->getCollection();

            $data = array();
            foreach ($collection as $value)
            {
                $data[] = $value->zipcode;
            }
            $address = Mage::getSingleton('checkout/session')->getQuote()
                                  ->getShippingAddress();   

            if (in_array($address->getData('postcode'),$data))
            {
                throw new Mage_Core_Exception(
                Mage::helper('catalog')->__('Shipping is not available for your location.')
                );die;
            }
            else
            {
            }

        }
.

在调试时发现,下面的函数在管理面板创建订单页面中返回空值,因此观察者文件中的邮政编码比较代码在管理面板中失败。

$address =  Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress();
$address->getData('postcode');
.

有帮助吗?

解决方案

在观察者中,而不是

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

放入

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

许可以下: CC-BY-SA归因
scroll top