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

How can I stop event to trigger in other magento module

我有一个 magento 扩展,它在 newsletter_subscriber_save_before 事件上将用户数据发送到 aPI。但现在我必须向 api 发送更多内容,并且新变量仅在 newsletter_subscriber_save_after.

可用

问题是如何在不从扩展的 config.xml 中删除的情况下停止该模块的 newsletter_subscriber_save_before

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

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

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

I don't want disable, as it disable event from everywhere.

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

所以如果扩展程序像这样配置了观察者:

<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 或全局)定义它并使用与原始代码相同的观察者代码("some_unique_code" 在我的示例中)。

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

<depends>
  <Other_Extension />
</depends>