문제

작고 기본적인 제휴 시스템을 생각해보십시오. 나는 같은 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,이 위대한 기사에 감사드립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top