0

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

  • sales_order_invoice_save_after
  • sales_order_place_after
  • sales_order_shipment_save_after
  • order_cancel_after

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

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

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

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

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

4

1 回答 1

0

如果您要覆盖观察者模型本身,或者您是否要覆盖观察者调用的模型,这并不完全清楚。

Mage_Core_Model_App::dispatchEvent()中,MagentoMage::getModel($obs['model'])用来抓取观察者模型。因此,只要您的配置通过其组名(即modulename/modelname而不是Foo_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该类。

于 2015-01-15T03:17:54.470 回答