繁体   English   中英

覆盖观察者?

[英]Override observer?

我目前有一个带有观察者的Magento模块,该模块侦听以下事件:

  • sales_order_invoice_save_after
  • sales_order_place_after
  • sales_order_shipment_save_after
  • order_cancel_after

观察者在模型中调用一个方法,该方法打包有关订单的重要详细信息,并在客户端选择的输出(JSON,CSV,XML)中将其导出到远程系统。

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

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

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

这甚至是解决我问题的正确方法吗? 例如,使用某种调度模型来寻找配置设置来决定哪个类将处理该过程是否更合适?

是否要覆盖观察者模型本身还是要覆盖由观察者调用的模型还不是很清楚。

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

<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类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM