防止在Magento中触发观察者

时间:2012-05-31 21:02:00

标签: php magento observers

我认为这是一个非常简单的问题,但考虑到我在编程方面的水平,对我来说并不容易。

我想知道在某些事件发生之后是否有一种停止或不触发观察者的方法,这是因为我正在做的观察者处于一个无限循环中,我想阻止它做这个循环。

我希望这是我的问题显然已经足够了。

由于

更新 一个例子可能是: 事件中的观察者是触发器:core_config_data_save_after,当启动此观察者时,您想要更新core_config_data表中的值,但是当您保存它时,观察者将再次启动并且存在循环

2 个答案:

答案 0 :(得分:8)

一种可能的解决方案是使用注册表并设置一个标志 - 只要在未来的点击中设置注册表标志,您只需从观察者返回。

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);
}

答案 1 :(得分:5)

您应该能够找到您想要的观察者并设置<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>

代码和更多细节: