Переопределить наблюдателя?

В настоящее время у меня есть модуль Magento с наблюдателем, который прослушивает следующие события:

  • sales_order_invoice_save_after
  • sales_order_place_after
  • sales_order_shipment_save_after
  • order_cancel_after

Наблюдатель вызывает метод в модели, который упаковывает важные детали о заказе и экспортирует их по выбору клиента (JSON, CSV, XML) в удаленную систему.

У меня есть один клиент, которому требуется некоторая мутация данных, прежде чем они будут экспортированы.

То, что я хотел бы сделать, это расширить этот модуль с помощью пользовательского локального модуля, а не создавать «специальную» версию для поддержки навсегда. Я могу достаточно легко расширить модель, чтобы переопределить метод, который бы справился с этим, но я не совсем уверен, как сделать так, чтобы он вызывался.

Как я могу переопределить класс, вызываемый наблюдателем?

Это даже правильный подход к моей проблеме? Например, было бы более уместно иметь какую-то модель диспетчеризации, которая ищет настройку конфигурации, чтобы решить, какой класс будет обрабатывать процесс?

0

Решение

Не совсем понятно, хотите ли вы переопределить саму модель наблюдателя или хотите переопределить модель, вызванную наблюдателем.

В 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 класс так же.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]