Magento路由器:如何在所有URL中捕获参数?

fwzugrvs  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(131)

想一个小的和基本的联盟系统。我想要一个URL像

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

每次在URL中找到afid时,都应该调用一个方法(基本上是为了在会话中保存“afid”,当客户购买东西时,我希望跟踪它)。

46qrfjad

46qrfjad1#

您不需要路由器。您需要设置一个事件侦听器,它在每次页面加载时触发,然后访问请求集合中的变量。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>

然后创建以下类

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可以随意命名。

xfb7svmp

xfb7svmp2#

我知道这是一个很老的答案,但是如果我们打算在会话中存储这些参数,我们就不应该使用controller_front_init_routers事件,这是原始问题的场景。例如,如果您在此时示例化customer/session,您将无法再执行客户登录。Alan在http://alanstorm.com/magento_sessions_early中指出了这一点。顺便说一句,感谢Alan的这篇精彩文章。

相关问题