2009-07-29 3 views
5

작고 기본적인 제휴 시스템을 생각해보십시오. 나는Magento 라우터 : 모든 URL에서 매개 변수를 어떻게 잡을 수 있습니까?

www.myshop.com/mynewproduct.html?afid=123 

때마다 afid 같은 URL이 방법은 (기본적으로 세션에서 "AFID"저장하고 고객이 물건을 구입하는 경우, 나는 그것을 추적 할)를 호출해야합니다, URL에 발견 할 수 있습니다.

어떻게 할 수있는 사람이 있습니까? 모든 힌트가 허용됩니다 ;-)

답변

20

라우터는 필요하지 않습니다. 모든 페이지로드에 대해 실행되는 이벤트 수신기를 설정 한 다음 요청 컬렉션의 변수에 액세스해야합니다. controller_front_init_routers 이벤트가 수행해야합니다.

그래서 다음

<global> 
    <events> 
     <controller_front_init_routers> 
      <observers> 
       <packagename_modulename_observer> 
        <type>singleton</type> 
        <class>Packagename_Modulename_Model_Observer</class> 
        <method>interceptMethod</method> 
       </packagename_modulename_observer> 
      </observers> 
     </controller_front_init_routers>  
    </events> 
</global> 

와 함께 설치 모듈의 구성은 다음 클래스 당신이 원하는 무엇이든 interceptMethod이 이름을 지정할 수 있습니다

app/code/local/Packagename/Modulename/Model/Observer.php 
class Packagename_Modulename_Model_Observer { 
    public function interceptMethod($observer) { 
     $request = $observer->getEvent()->getData('front')->getRequest(); 
     $afid  = $request->afid; 

     //do whatever you want with your variable here 
    } 
} 

을 만들 수 있습니다.

+1

고마워요! 그 방법 ;-) – Max

1

이 답변은 매우 오래된 것으로 알고 있지만, 세션에서 매개 변수를 저장하려는 경우 controller_front_init_routers 이벤트를 사용하면 안됩니다. 원래 질문에 대한 시나리오입니다. 예를 들어, customer/session을 인스턴스화하면 더 이상 고객 로그인을 수행 할 수 없습니다. 앨런은 이것을 자신이 http://alanstorm.com/magento_sessions_early이라고 지적했습니다. BTW,이 위대한 기사를 주신 Alan에게 감사드립니다.

관련 문제