我目前有一个Magento模块,它有一个观察者,可以监听以下事件:
观察者在Model中调用一个方法,该方法打包关于订单的重要细节,并在客户机选择的输出(JSON、CSV、XML)中将它们导出到远程系统。
不过,我有一个客户端在导出数据之前需要对数据进行一些修改。
我想做的是用一个自定义的本地模块来扩展这个模块,而不是制作一个“特殊”版本来永久维护。我可以很容易地扩展模型,以覆盖处理这个问题的方法,但我不太确定如何确保它被调用。
如何覆盖观察者调用的类?
这是解决我的问题的正确方法吗?例如,是否应该有某种类型的调度模型来查找配置设置,以决定哪个类将处理该进程?
发布于 2015-01-15 03:17:54
还不完全清楚是要覆盖观察者模型本身,还是要覆盖观察者调用的模型。
在Mage_Core_Model_App::dispatchEvent()中,Magento使用Mage::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类。
https://stackoverflow.com/questions/27950404
复制相似问题