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

  • sales_order_invoice_save_after
  • sales_order_place_after
  • sales_order_shipment_save_after
  • order_cancel_after

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

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

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

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

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

#1楼 票数:0 已采纳

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

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

  ask by natecornell translate from so

未解决问题?本站智能推荐:

2回复

事件观察者未获取产品详细信息

我在config.xml文件中创建了一个如下所示的观察者事件 在我的模型中,我创建了Observer.php 参考将产品添加到购物车时更改报价的价格:magento
2回复

观察者不保存订单

我已经构建了一个侦听sales_convert_quote_to_order事件的观察者。 事件被触发,我只想为订单的属性添加值。 该属性已设置 - 在日志中打印 - 但magento不保存订单。 我做错了什么? Observer.php config.xml中 我通
5回复

在观察者中停止产品保存过程

我目前正在开发一个在后端使用产品编辑的模块。 其目的是检索产品所属的类别,并使用所选类别列表填充属性(Brand属性)。 管理员必须至少选择一个类别。 我的模块按预期工作,但如果管理员在编辑产品时没有选择任何类别,我不知道如何停止保存过程。 这是工作流程 管理员在产
1回复

在观察者中获取先前的订单ID

我正在为* checkout_submit_all_after *事件编写观察者,它工作正常。 当您编辑订单时,例如#1001,magento用#1001-1创建一个新订单并取消之前的订单。 管理面板告诉我#1001-1与#1001链接,那么如何知道当前订单是否实际上是修改后的版本?
1回复

Magento事件/观察者对象getData问题

我有一个我构建的Magento模块,允许您通过管理界面将字符串保存到Magento的核心配置表中。 我有一个观察者设置,当字符串保存在后端时运行一个方法。 在将其保存到数据库之前,我正在试图拦截字符串并对其进行编码。 所以当我的事件被触发时,它会运行: 输出如下所示:
1回复

Magento:停止在pre_dispatch观察者中调度

我想影响产品渲染(将$params传递给Mage_Catalog_Helper_Product_View::prepareAndRender() )并在controller_action_predispatch_catalog_product_view事件中注册观察者。 渲染工作正常,但仍
4回复

Magento:如何禁用或更改核心观察者方法的工作方式

我一直在想这个问题。 如果Magento编写了一个核心Observer类并执行了一个你不希望它执行的功能,或者你想重写它,该怎么办? 有没有办法说,不要在Observer中使用此方法,只需使用我的。 如果我为自己的Observer设置一个方法,它不会只是首先执行核心功能,然后是我实现的任何
2回复

sales_quote_save_before观察者执行两次

我有一个观察者观察sales_quote_save_before事件,当项目被添加到购物车,从购物车中移除或在购物车中更新时,它会执行两次。 我假设save_before (以及,就此而言, save_after事件)被触发多次。 我想知道为什么/发生这种情况,以及如何限制观察者只执