2010-06-30 2 views
14

나는 주문을 할 때 주문 데이터를 내보낼 옵서버를 쓰려고합니다. 전에 어떤 모듈도 작성하지 않았습니다. 이 기사에서 내 구현을 기반으로 : http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_methodmagento sales_order_place_after 옵저버

지금까지 파일에 쓸 더미 코드를 트리거하려고합니다. 로그에 아무것도 표시되지 않고 파일이 수정되지 않습니다. 아파치 사용자가 디렉토리에 대한 권한을 가지고 있습니다. Magento 설정에서 캐싱 설정을 사용 중지했습니다. 나는 약간의 명명 규칙에 대해 약간 혼란 스럽다. 방금 예제를 따라하려고했습니다. 누구 내가 잘못 가고 있는지 알아? 마 젠토/응용 프로그램을/etc/모듈에서

/Feed.xml :

젠토/응용 프로그램/코드/지역/공급/판매/기타/Config.xml의
<?xml version="1.0"?> 
<config> 
    <modules> 
     <Feed_Sales> 
      <codePool>local</codePool> 
      <active>true</active> 
     </Feed_Sales> 
    </modules> 
</config> 

:

<?xml version="1.0"?> 
<config> 
    <global> 
     <models> 
      <feedsales> 
       <class>Feed_Sales_Model</class> 
      </feedsales> 
     </models> 
     <events> 
      <sales_order_place_after> 
       <observers> 
        <feed_sales_order_observer> 
         <type>singleton</type> 
         <class>sales/order_observer</class><!-- I've also tried Feed_Sales_Model_Order_Observer here --> 
         <method>export_new_order</method> 
        </feed_sales_order_observer> 
       </observers> 
      </sales_order_place_after> 
     </events> 
    </global> 
</config> 

마 젠토/응용 프로그램/코드/지역/피드/판매/모델/주문/Observer.php :

<?php 
class Feed_Sales_Model_Order_Observer 
{ 
    public function __contruct() 
    { 

    } 

    /** 
    * Exports new orders to an xml file 
    * @param Varien_Event_Observer $observer 
    * @return Feed_Sales_Model_Order_Observer 
    */ 
    public function export_new_order($observer) 
    { 
     Mage::log("reached export_new_order"); 
     try 
     { 
      $dumpFile = fopen('/home/jorelli/new_orders/testdump', 'w+'); 
      fwrite($dumpFile, 'this is a test!'); 
     } 
     catch (Exception $e) 
     { 
      Mage::log("order export failed.\n"); 
     } 
     return $this; 
    } 
} 
?> 

아파치와 데비안 레니에 젠토 1.4 그것은 어떤 연구를 위해 중요해야하는 경우 eason.

답변

0

이런 쓰레기. 나는 어리 석었다. 필자는 많은 일을하는 것처럼 커맨드 라인 스크립트로 테스트했지만, 아파치 인터프리터가 아닌 커맨드 라인 인터프리터 만 쓰기가 가능했다. 어제 밤에 사무실에서 나왔어 야 했어.

기록상으로 이것은 주문 발주시 조치를 실행하는 방법입니다. 나는 후세를 위해 그것을 떠날거야.

3

관찰자 선언에 문제가있는 것 같습니다. 이 시도해보십시오 :

<events> 
     <sales_order_place_after> 
      <observers> 
       <feed_sales_order_observer> 
        <type>singleton</type> 
        <class>feedsales/order_observer</class> 
        <method>export_new_order</method> 
       </feed_sales_order_observer> 
      </observers> 
     </sales_order_place_after> 
    </events> 
+0

제안에 감사드립니다. 변경 사항을 확인하지 못했습니다 : - \ – jorelli

+0

변경 사항을 찾기 전에 구성 캐시를 지웠는지 확인하십시오. XML은 모든 페이지로드시 읽히지 않습니다. –

+0

예, 당분간 설정 캐시를 완전히 비활성화했습니다. 그래도 언급할만한 가치가 있습니다^_^ 기록을 위해 특정 클래스 별칭에 대해 완전히 옳았습니다. 'feedsales/order_observer'가 작동합니다. 'Feed_Sales_Model_Order_Observer'의 리터럴 클래스 이름을 사용하는 도 작동합니다. 'sales/order_observer'가 작동하지 않습니다. – jorelli

14

my articles을 읽으면 네이밍 규칙의 관점에서 무슨 일이 벌어지고 있는지 이해하고 Magento의 관례/가정에 근거 할 수 있습니다.

위의 샘플을 보면 몇 가지 문제가 있습니다.

첫째, 등 폴더에있는 파일은 잘못된 이름

magento/app/etc/modules/Feed.xml 

당신은 아마 시스템에서

magento/app/etc/modules/Feed_Sales.xml 

봐 할 수 있도록이 파일은, Packagename_Modulename 선정 할 필요가 - > 구성 - > 고급 귀하의 모듈이 나타나는지 확인하십시오. 그렇다면이 파일의 이름을 올바르게 지정해야합니다. 이렇게하지 않으면 생성 한 모듈이 시스템에로드되지 않고 코드가 실행될 기회가 없습니다.

다음으로 클래스를 잘못 지정하고 있습니다. 당신은 말합니다

sales/order_observer 

하지만 첫 번째 부분은 판매 (판매)가 잘못되었습니다.당신은 당신이

feedsales/order_observer 

를 체크 아웃 Class/URI tab of Commerce Bug을 원하고 여기에 무슨 일이 일어나고 있는지의 더 나은 아이디어를 얻을 어떤 URI를 (같은 sales/order)를 입력 해보십시오 의미

<models> 
     <feedsales> <!-- this is your model part --> 
      <class>Feed_Sales_Model</class> 
     </feedsales> 
    </models> 

로 모델 섹션을 정의했다.

또 다른 빠른 팁은 핸들러 설정을 시도 할 때 모든 페이지로드시 발생하는 이벤트에 대해 수행하십시오. 그런 다음 메소드를 호출하면 원하는 특정 이벤트로 전환하고 전체 구매 프로세스를 거칠 필요가 없습니다.

마지막으로, 예제 복사 중임을 알고, 모듈을 Sales이라는 폴더에 넣는 것을 고려해보십시오. Magento 핵심 폴더의 이름을 흉내내는 것은 혼란의 추가 레이어 만 추가하는 것인데, 이는 시스템을 배우는 동안 필요한 것이 아닙니다.