Php 防止Magento中的观察者触发

Php 防止Magento中的观察者触发,php,magento,observers,Php,Magento,Observers,我认为这是一个非常简单的问题,但考虑到我的编程水平,这对我来说并不容易 我想知道在某些事件发生后是否有停止或不触发观察者的方法,这是因为我正在做的观察者处于一个无限循环中,我想阻止它做那个循环 我希望我的问题足够清楚 谢谢 更新: 例如: 在以下事件中触发观察者:core_config_data_save_启动后,当此观察者启动时,您希望更新core_config_data表中的值,但在保存时,观察者再次启动,出现循环,您应该能够找到所需的观察者并将其设置为禁用 日志/访客 initByReq

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

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

我希望我的问题足够清楚

谢谢

更新: 例如:
在以下事件中触发观察者:core_config_data_save_启动后,当此观察者启动时,您希望更新core_config_data表中的值,但在保存时,观察者再次启动,出现循环

,您应该能够找到所需的观察者并将其设置为禁用


日志/访客
initByRequest
.... 其他活动

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

<frontend>
    <events>
        <controller_action_predispatch>
            <observers><log><type>disabled</type></log></observers>
        </controller_action_predispatch>
    </events>
</frontend>

残废
代码和更多详细信息:


您应该能够找到您想要的观察者,并将
设置为禁用


日志/访客
initByRequest
.... 其他活动

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

<frontend>
    <events>
        <controller_action_predispatch>
            <observers><log><type>disabled</type></log></observers>
        </controller_action_predispatch>
    </events>
</frontend>

残废
代码和更多详细信息:


一个可能的解决方案是使用注册表并设置一个标志-如果在将来的任何点击中设置了注册表标志,您只需从您的观察者处返回即可

i、 e


一个可能的解决方案是使用注册表并设置一个标志——如果在将来的任何点击中设置了注册表标志,您只需从您的观察者返回即可

i、 e



你在什么背景下谈论什么样的事件和观察者?你能举个例子吗?@Pekka观察者在以下事件中被触发:core\u config\u data\u save\u after,假设当这个观察者启动时,你想更新core\u config\u data表中的一个值,但当你保存它时,观察者会再次启动,出现循环,你想做什么,我假设运行一些自定义代码,在完成时也会对
core\u config\u数据表
进行更改?@B00MER是的,我尝试将事件更改为而不是,并对保存到core\u config\u数据表的行进行注释,但我不知道它为什么不保存,或者如何将其添加到保存到数据库的对象中。我接着说,谢谢。你说的是什么样的事件和观察者,在什么背景下?你能举个例子吗?@Pekka观察者在以下事件中被触发:core\u config\u data\u save\u after,假设当这个观察者启动时,你想更新core\u config\u data表中的一个值,但当你保存它时,观察者会再次启动,出现循环,你想做什么,我假设运行一些自定义代码,在完成时也会对
core\u config\u数据表
进行更改?@B00MER是的,我尝试将事件更改为而不是,并对保存到core\u config\u数据表的行进行注释,但我不知道它为什么不保存,或者如何将其添加到保存到数据库的对象中。我遵循了这一点,谢谢。我不想像这样禁用它,我希望事件至少调度一次。你能再读一遍我的问题吗?我已经更新了它。我不想这样禁用它,我希望事件至少调度一次。你能再读一遍我的问题吗?我已经更新了它。嗨@Drew我想这样做,但有时我需要运行它两次,因为有时它第一次被保存,然后被更新。所以有时候它需要跑两次。但如果你有其他有用的想法,我想我能找到答案。谢谢,为了知道如何运行代码一次、两次等,您到底检查了什么条件?您的模型上是否有要检查的属性值?我对Mage::resgister有一个问题,我希望您能回答这个问题,如果我像您的示例一样创建一些注册表,如果这个注册表已经存在,Magento会抛出异常或类似的情况?是的,除非您将布尔真值作为第三个参数传入。因此,如果您不希望它在值已经存在的情况下抛出异常,那么可以这样调用:Mage::register('my_observer_has_run',true,true);好的,我试试看。还有一个问题,注册表会持续多长时间?Hi@Drew我想这样做,但有时我需要运行两次,因为有时它会第一次保存,然后更新。所以有时候它需要跑两次。但如果你有其他有用的想法,我想我能找到答案。谢谢,为了知道如何运行代码一次、两次等,您到底检查了什么条件?您的模型上是否有要检查的属性值?我对Mage::resgister有一个问题,我希望您能回答这个问题,如果我像您的示例一样创建一些注册表,如果这个注册表已经存在,Magento会抛出异常或类似的情况?是的,除非您将布尔真值作为第三个参数传入。因此,如果您不希望它在值已经存在的情况下抛出异常,那么可以这样调用:Mage::register('my_observer_has_run',true,true);好的,我试试看。还有一个问题,注册时间是多久?
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);
}