質問

マルチウェブサイト用に設定された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>
.

observer.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
            {
            }

        }
.

デバッグ中は、下記関数が「管理パネルの作成順序」ページで空の値を返し、したがってObserverファイル内のポストコード比較コードは管理パネルで失敗します。

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

役に立ちましたか?

解決

あなたの観察者の中ではなく

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

put

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

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top