2015-01-14 10 views
0

나는 현재 다음과 같은 이벤트를 수신 관찰자와 젠토 모듈이 주문에 대한 중요한 세부 사항을 패키지로 작성하고 고객의 선택에 따라 수출하는 모델 (JSON, CSV, XML)을 원격 시스템에 저장합니다.오버뷰 옵저버? 관찰자가의 메소드를 호출</p> <ul> <li>sales_order_invoice_save_after</li> <li>sales_order_place_after</li> <li>sales_order_shipment_save_after</li> <li>order_cancel_after</li> </ul> <p>:

데이터를 내보내기 전에 일부 변형이 필요한 클라이언트가 하나 있습니다.

내가하고 싶은 것은 영원히 유지하기 위해 "특별"버전을 만드는 대신 사용자 정의 로컬 모듈로이 모듈을 확장하는 것입니다. 이 모델을 쉽게 처리 할 수있는 메서드를 재정의 할 수 있지만 모델을 호출하는 방법을 확실히 알 수는 없습니다.

관찰자가 호출 한 클래스를 어떻게 재정의 할 수 있습니까?

내 문제의 올바른 해결 방법이 있습니까? 예를 들어, 어떤 클래스가 프로세스를 처리 할 것인지 결정하기 위해 구성 설정을 찾는 디스패치 모델을 사용하는 것이 더 적절할까요?

답변

0

관찰자 모델 자체를 재정의하려는 경우 또는 관찰자가 호출 한 모델을 재정의하려는 경우 완전히 명확하지 않습니다.

Mage_Core_Model_App::dispatchEvent()에서 Magento는 관찰자 모델을 얻기 위해 Mage::getModel($obs['model'])을 사용합니다.

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

이가 작동 : 그래서, 한 구성이 그룹 이름 (예 : modulename/modelname 대신 Foo_Modulename_Model_Modelname의)에 의해 관찰자를 참조로, 당신은 마 젠토는 별도의 모듈에 관찰자 모델을 변경하는 재 작성 표준 사용할 수 있습니다 다른 모델을 재정의하려는 경우에도 마찬가지입니다. 예를 들어, 관찰자가 Mage::getModel('mymodule/order_export')을 호출하면 마찬가지로 mymodule/order_export 클래스를 다시 작성해야합니다.

+0

재 작성에 대해 알지 못했습니다. 감사! – natecornell