首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超驰观察者?

超驰观察者?
EN

Stack Overflow用户
提问于 2015-01-14 18:55:21
回答 1查看 1.2K关注 0票数 0

我目前有一个Magento模块,它有一个观察者,可以监听以下事件:

  • sales_order_invoice_save_after
  • sales_order_place_after
  • sales_order_shipment_save_after
  • order_cancel_after

观察者在Model中调用一个方法,该方法打包关于订单的重要细节,并在客户机选择的输出(JSON、CSV、XML)中将它们导出到远程系统。

不过,我有一个客户端在导出数据之前需要对数据进行一些修改。

我想做的是用一个自定义的本地模块来扩展这个模块,而不是制作一个“特殊”版本来永久维护。我可以很容易地扩展模型,以覆盖处理这个问题的方法,但我不太确定如何确保它被调用。

如何覆盖观察者调用的类?

这是解决我的问题的正确方法吗?例如,是否应该有某种类型的调度模型来查找配置设置,以决定哪个类将处理该进程?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-15 03:17:54

还不完全清楚是要覆盖观察者模型本身,还是要覆盖观察者调用的模型。

Mage_Core_Model_App::dispatchEvent()中,Magento使用Mage::getModel($obs['model'])获取观察者模型。因此,只要您的配置通过组名(即modulename/modelname而不是Foo_Modulename_Model_Modelname)引用观察者,那么您就可以使用标准Magento重写来在一个单独的模块中更改观察者模型:

代码语言:javascript
复制
<config>
  <global>
    <models>
      <!-- this is the group name of the module's models -->
      <modulename>
        <rewrite>
          <!-- rewrite the modulename/modelname model to use a different class -->
          <modelname>Bar_Modulename_Model_Modelname</modelname>
        </rewrite>
      </modulename>
    </models>
  </global>
</config>

如果你也想要覆盖另一个模型,这个方法也是一样的。例如,如果您的观察者调用Mage::getModel('mymodule/order_export'),那么您应该以同样的方式重写mymodule/order_export类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27950404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档