Magento Router : 모든 URL에서 매개 변수를 어떻게 잡을 수 있습니까?
문제
작고 기본적인 제휴 시스템을 생각해보십시오. 나는 같은 URL을 원한다
www.myshop.com/mynewproduct.html?afid=123
매번 afid
URL에서 발견되면 메소드가 호출되어야합니다 (기본적으로 세션에서 "애호가"를 저장하고 고객이 물건을 구매할 때 추적하고 싶습니다).
여기서 어떻게하는지 아는 사람? 모든 힌트가 받아 들여집니다 ;-)
해결책
이를 위해 라우터가 필요하지 않습니다. 모든 페이지로드에 대해 발사되는 이벤트 리스너를 설정 한 다음 요청 수집에서 변수에 액세스하려고합니다. 컨트롤러_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>
그런 다음 다음 수업을 만듭니다
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
}
}
그만큼 interceptMethod
원하는대로 명명 될 수 있습니다.
다른 팁
나는 이것이 아주 오래된 답변이라는 것을 알고 있지만, 우리가 사용해서는 안된다고 말하는 것은 유효합니다. controller_front_init_routers
이벤트 이벤트 해당 매개 변수를 세션에 저장하려는 경우 원래 질문의 시나리오입니다. 예를 들어, 인스턴스화하는 경우 customer/session
이 시점에서 더 이상 고객 로그인을 수행 할 수 없습니다. 앨런은 이것을 스스로 지적했다 http://alanstorm.com/magento_sessions_early. BTW,이 위대한 기사에 감사드립니다.
제휴하지 않습니다 StackOverflow