2011-09-19 3 views
0

Magento 설치와 다른 응용 프로그램 간의 연결을 느슨하게하려고합니다. 특히 현재 고객과 구매자가 관심을 갖는 부분은 두 가지뿐입니다. 지금까지 편집 한 내용은 파일 app/code/core/Mage/Customer/controllers/AccountController.php입니다 - 기능 createPostAction()이 추가되어 고객의 정보를 다른 응용 프로그램에 보냅니다. 한번 수정 된 파일은 success.phtml 파일에 저장되어 주문 세부 정보를 전송합니다.Magento 신규 사용자 등록 - 자신의 코드 삽입

내가 가지고있는 문제는 사용자가 장바구니에 항목 (손님)을 넣은 다음 계산 프로세스의 일부로 등록하면 두 번째 응용 프로그램의 고객 레코드가 생성되지 않는다는 것입니다. 사용자가 먼저 명시 적으로 등록한 다음 별도로 체크 아웃하는 경우에만 작동합니다.

AccountController.php은 내가 원하는 결과를 얻기 위해 수정해야하는 파일이 잘못되었을 수 있습니다. 어떤 파일을 사용해야합니까?

편집 : 코드 샘플을 포함시키지 않습니다. 코드는 문제가 아니지만 잘못된 위치에있는 것 같습니다. 새로운 고객이 등록 될 때 실행해야하는 맞춤 코드를 추가하는 좋은 장소는 어디입니까?

+1

편집 핵심 파일은 기본 templas (또는 비즈니스 로직을 사용하는 것)를 수정하는 것뿐만 아니라 큰 nono이며 코드 샘플이 없으면 코드 샘플없이 추상적입니다. 모두가 할 수있는 기본값이 아닌 코드입니다. 관찰 –

+0

내 질문은 어디에 사용자가 등록 할 때 실행 해야하는 사용자 정의 로직을 추가하는 기본 코드입니다. 핵심 파일이 그다지 좋은 장소가 아니라는 것에 동의 할 수 있습니다. 그러나 저는 magento를 처음 접했고 귀하의 제안이 필요합니다! – SaltyNuts

답변

3

Magento에서는 정상적으로 수행 할 수 있지만 달성하기는 다소 까다 롭습니다.

를 다음과 같이 조치 이름을 확인할 수 있습니다 관찰자 방법에 그런

<events> 
    <controller_action_postdispatch> 
     <observers> 
      <yourmodule_anything> 
       <type>singleton</type> 
       <class>yourmodule/observer</class> 
       <method>someMethod</method> 
      </yourmodule_anything> 
     </observers> 
    </controller_action_postdispatch> 
</events> 

: 나는 당신이 controller_action_postdispatch 이벤트를 대기하는 관찰자를 만들 필요가 얼마 전에 같은 작업을 했어 관찰자

첫째을 사용하여 해결했다

<?php 
$action = $observer->getEvent()->getControllerAction(); 
if ($action->getFullActionName() == 'customer_account_createpost') { 
    if (Mage::getSingleton('customer/session')->isLoggedIn()) { // this check allows to determine if customer session was created which means successfull registration 
    } 
} 

결제 등록을 위해 비슷한 기능을 수행 할 수 있습니다. 일반적으로 옵서버는 Magento 기능을 확장하는 훌륭한 방법입니다. 그 (것)들에 관하여 더 많은 것을 읽으십시오 here

+0

코드에서 시스템 전체 디스패치 이벤트 대신 "controller_action_postdispatch_customer_account_createpost"이벤트를 수신 대기해야합니다. 이로 인해 오버 헤드가 줄어들고 "customer_account_createpost"에 대한 프로그램 검사를 제거 할 수 있습니다. –

+0

@Lee Saferite 네 말이 맞습니다. 이것은 몇 가지 조치를 점검하고있는 모듈의 스 니펫 일뿐입니다. – Zifius

+0

그래도 전역 작업 이벤트 대신 특정 조치 이벤트를 사용하는 것이 가장 좋습니다. 그렇지 않으면 청취자가 모든 작업에 대해 해고 당합니다. –

1

Anton S가 맞습니다.이 경우 Magento가 이벤트를 실행하는지 확인해야합니다. 그렇다면 코드가 해당 이벤트에 응답해야합니다.

그 경우가 아니거나 사용자 계정이 생성되기 전에 실행하는 사용자 지정 논리가 필요한 경우, 사용자 정의 모듈을 사용하여 컨트롤러를 오버로드/재정을 고려하시기 바랍니다 : http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/how_to_overload_a_controller

이 그대로 원래의 핵심 코드를 유지합니다. 기본적으로 Magento는 대신 사용자 정의 컨트롤러를 사용합니다. 컨트롤러에서 실행해야하는 메서드를 찾을 수 없으면 대신 코어 코드를 사용합니다.