2010-07-02 60 views
2

我的觀察陷在和無限循環。爲什麼會發生,我該如何解決?爲什麼我的Magento觀察員陷入無盡循環?

config.xml文件:

<?xml version="1.0"?> 
<config> 
    <global> 
     <models> 
      <shipmentsave> 
       <class>Company_Shipmentsave_Model</class> 
      </shipmentsave> 
     </models> 
    </global> 
    <adminhtml> 
     <events> 
      <sales_order_shipment_track_save_after> 
       <observers> 
        <shipmentsave> 
         <type>model</type> 
         <class>shipmentsave/observer</class> 
         <method>salesOrderShipmentTrackSaveAfter</method> 
        </shipmentsave> 
       </observers> 
      </sales_order_shipment_track_save_after> 
      <sales_order_shipment_save_after> 
       <observers> 
        <shipmentsave> 
         <type>model</type> 
         <class>shipmentsave/observer</class> 
         <method>salesOrderShipmentSaveAfter</method> 
        </shipmentsave> 
       </observers> 
      </sales_order_shipment_save_after> 
     </events> 
    </adminhtml> 
    <frontend> 
     <events> 
      <sales_order_shipment_save_after> 
       <observers> 
        <shipmentsave> 
         <type>singleton</type> 
         <class>shipmentsave/observer</class> 
         <method>salesOrderShipmentSaveAfter</method> 
        </shipmentsave> 
       </observers> 
      </sales_order_shipment_save_after> 
     </events> 
    </frontend> 
</config> 

Observer.php:

class Company_Shipmentsave_Model_Observer 
{ 
    public function salesOrderShipmentSaveAfter(Varien_Event_Observer $observer) 
    { 
     error_log("My observer called ....",0); 
     $shipment = $observer->getEvent()->getShipment(); 
     $order = $shipment->getOrder(); 
     $track = Mage::getModel('sales/order_shipment_track') 
      ->setNumber('1231354564') 
      ->setCarrierCode('localdelivery') 
      ->setTitle('Aramex'); 
     $shipment->addTrack($track); 
     $shipment->save(); 
     return; 
    } 
} 

回答

4

你的觀察等待,以得到保存出貨,然後保存出貨,從而導致它接收另一個事件(yadda yadda ad nauseum)。您需要一種逃避循環或不必保存貨件的方法。

您是否可以將您的活動移動到sales_order_shipment_save_before上,然後允許正常發貨保存生效,或者您是否需要發貨已保存以完成您的邏輯部分?

如果是的話,更改你的觀察以下行,使Magento的使用它作爲一個單身:

<type>singleton</type> // changed from model 

然後,創建你的類變量來跟蹤您是否已經又遞歸。如果是這樣,那就回去。

或者,你可以檢查,看看是否已經有上裝運任何跟蹤號碼,只有在有沒有(和你加一個)保存。這也會殺死遞歸。

讓我知道,如果這些對你的作品之一。

謝謝, 喬

+0

喜喬, 感謝回答。 我想你的意思sales_order_shipment_before而不是sales_order_shipment_after因爲我使用sales_order_shipment_after 是改變事件sales_order_shipment_before工作對我來說已經面臨的問題。 但還是好奇,想知道如何使用sales_order_shipment_save_after如果有的話我需要。 問候, SAURABH – Saurabh 2010-07-03 04:05:22

+0

它已經因爲你回答了這個很長一段時間,但可以提供一些見解如何設置,你在你的答案談單變量? – spdaly 2012-12-05 17:02:07

0

我用

sales_order_shipment_save_after 

其工作對我來說

謝謝:)