2011-05-23 97 views
3

我有一位遵守sales_quote_save_before事件的觀察者,當物品添加到購物車,從購物車中取出或在購物車中更新時,它會執行兩次。sales_quote_save_before observer執行兩次

我假設save_before(和事件,save_after事件)在某個地方被觸發不止一次。

我想知道爲什麼會發生這種情況,以及如何限制觀察者只執行一次。

我試過這裏提供的解決方案:Magento - customer_save_after always fired twice,但我的觀察者仍然執行兩次(當我用Mage::log()執行日誌時,時間戳是1秒不同)。

任何幫助,非常感謝。

+0

我在CE 1.7中也有這個,它被激發了兩次。你找到了更好的解決方案嗎? – Guus 2013-09-12 09:26:23

回答

0

我最終解決的問題是將$observer對象的updated_at值與當前時間進行比較。如果最後一次更新超過3秒(完全是任意值),我讓觀察者執行,否則我會返回。這對我有用,因爲我的觀察者的兩個實例總是在1-2秒內被解僱。

我認識到這不是最好的解決方案,因爲它不考慮服務器負載或其他延遲問題,所以如果有人可以想到更好的解決方案,我會很感激反饋。

$updatedAt = date('U', strtotime($observer->getQuote()->getUpdatedAt())); 
    $now = time(); 
    if(($updatedAt + 3) > $now){ 
     return $this; //the observer has already been executed in this request 
    } 
    .... execute observer code 
0

我知道這個答案是晚了,但我希望將是有用的,因爲我也有同樣的問題,並能找到一個很好的解決方案。

我使用Magento的1.9 CE測試它,在sales_quote_save_before觀察者,使用如下代碼:

$quote = $observer->getEvent()->getQuote(); 
$quote->addErrorInfo('error', 'your_module_name', 1, 'your error message')->setHasError(true); 

return $this; 

該解決方案還將會禁用(刪除)在購物車頁面結帳按鈕。