我有一个观察者观察sales_quote_save_before
事件,当项目被添加到购物车,从购物车中移除或在购物车中更新时,它会执行两次。
我认为save_before
(以及save_after
事件)在某处被触发不止一次。
我想知道为什么/发生这种情况,以及如何限制观察者只执行一次。
我尝试过这里提供的解决方案:Magento - customer_save_after always fired twice,但我的观察者仍然执行两次(当我使用Mage::log()
记录执行时,时间戳是1秒不同)。
非常感谢任何帮助。
答案 0 :(得分:0)
我最终要解决的问题是将updated_at
对象的$observer
值与当前时间进行比较。如果最后一次更新超过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
答案 1 :(得分:0)
我知道这个答案是迟到的,但我希望它会有用,因为我也遇到了同样的问题,并且找到了一个很好的解决方案。
我正在使用Magento 1.9 CE测试它,在sales_quote_save_before observer中,使用以下代码:
$quote = $observer->getEvent()->getQuote();
$quote->addErrorInfo('error', 'your_module_name', 1, 'your error message')->setHasError(true);
return $this;
此解决方案还将禁用(删除)购物车页面中的结帐按钮。