我认为这是一个非常简单的问题,但考虑到我的编程水平,这对我来说并不容易。
我想知道在某些事件发生后是否有停止或不触发观察者的方法,这是因为我正在做的观察者处于无限循环中,我想阻止它执行该循环。
我希望我的问题足够清楚。
谢谢
更新: 一个例子可能是:观察者在事件中触发:core_config_data_save_after,当这个观察者启动时,你想更新 core_config_data 表中的值,但是当你保存它时,观察者再次启动并且有循环
一种可能的解决方案是使用注册表并设置一个标志 - 如果在任何未来命中设置了注册表标志,您只需从观察者返回。
IE
public function myObserver(Varien_Event_Observer $observer)
{
if (Mage::registry('my_observer_has_run')) {
return $this;
}
.... Your Code Here ....
Mage::register('my_observer_has_run', true);
}
您应该能够找到您想要并设置的观察者<type>disabled</type>
<frontend>
<events>
<controller_action_predispatch>
<observers>
<log>
<class>log/visitor</class>
<method>initByRequest</method>
</log>
</observers>
</controller_action_predispatch>
.... other events
</events>
本地修改 XML 以禁用上面找到的观察者:
<frontend>
<events>
<controller_action_predispatch>
<observers><log><type>disabled</type></log></observers>
</controller_action_predispatch>
</events>
</frontend>
代码和更多细节: