无法在“管理”面板中创建订单页面中的送货地址邮政编码
-
29-09-2020 - |
题
我正在使用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();
.