1

これは本当に簡単な質問だと思いますが、私のプログラミングのレベルを考えると、それほど簡単ではありません。

イベントが発生した後にオブザーバーを停止またはトリガーしない方法があるのではないかと思います。これは、私が行っているオブザーバーが無限ループにあり、そのループを停止したいからです。

私の質問が明らかに十分であることを願っています。

ありがとう

更新: 例: オブザーバーはイベントでトリガーされます: core_config_data_save_after このオブザーバーが開始されたときに、core_config_data テーブルの値を更新したいのですが、保存するとオブザーバーが再び開始され、ループが発生します。

4

2 に答える 2

8

考えられる解決策の1つは、レジストリを使用してフラグを設定することです。将来のヒットでレジストリフラグが設定された場合は、オブザーバーから戻るだけです。

すなわち

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);
}
于 2012-06-03T22:21:42.377 に答える
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>

コードと詳細:

于 2012-05-31T22:38:21.857 に答える