如何在其他magento模块中停止事件触发

时间:2015-02-04 13:26:31

标签: magento events triggers

我有一个magento扩展,它将用户数据发送到newsletter_subscriber_save_before事件的aPI。但现在我必须向该api发送更多内容,并且只有newsletter_subscriber_save_after才能使用新的var。

问题是如何停止newsletter_subscriber_save_before该模块而不从extenion的config.xml中删除。

如果我同时保留两者,它会向api发送两次数据,如果我从扩展程序中删除newsletter_subscriber_save_before,如果有人升级,它将再次出现。

我不想禁用,因为它禁用了来自任何地方的事件。

2 个答案:

答案 0 :(得分:4)

  

我不想禁用,因为它禁用了来自任何地方的事件。

但禁用观察者是正确的方法。正是对于这个用例,观察者类型"禁用"存在。

因此,如果扩展已经像这样配置了观察者:

<events>
  <newsletter_subscriber_save_before>
    <observers>
      <some_unique_code>
        <type>singleton</type>
        <class>extension/observer</class>
        <method>sendSomething</method>
      </some_unique_code>
    </observers>
  </newsletter_subscriber_save_before>
</events>

你可以在你自己的扩展配置中禁用它,如下所示:

<events>
  <newsletter_subscriber_save_before>
    <observers>
      <some_unique_code>
        <type>disabled</type>
      </some_unique_code>
    </observers>
  </newsletter_subscriber_save_before>
</events>

注意你在同一区域(前端,adminhtml或全局)中定义它,并使用相同的观察者代码(&#34; some_unique_code&#34;在我的例子中)作为原始代码。

重要的是,您的扩展程序在原始扩展程序之后加载,您可以通过app/etc/modules/中的XML依赖项实现这一点:

<depends>
  <Other_Extension />
</depends>

答案 1 :(得分:2)

在config.xml中,您可以使用相同的事件名称,从而将事件方法更改为空方法。