防止在Magento中触发观察者

apz*_*000 1 php observers magento

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

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

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

谢谢

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

Dre*_*ter 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);
}
Run Code Online (Sandbox Code Playgroud)


B00*_*MER 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>
Run Code Online (Sandbox Code Playgroud)

本地修改的XML以禁用上面发现的观察者:

<frontend>
    <events>
        <controller_action_predispatch>
            <observers><log><type>disabled</type></log></observers>
        </controller_action_predispatch>
    </events>
</frontend>
Run Code Online (Sandbox Code Playgroud)

代码和更多细节: