想想一个小而基本的联盟系统。我想要一个像
这样的网址www.myshop.com/mynewproduct.html?afid=123
每次在网址中找到afid
时,都应该调用一个方法(基本上是为了在会话中保存“afid”,当客户购买东西时,我想跟踪它)。
有人知道怎么做吗?每个提示都被接受; - )
答案 0 :(得分: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>
然后创建以下类
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
可以根据需要命名。
答案 1 :(得分:1)
我知道这是一个非常古老的答案,但如果我们打算在会话中存储这些参数,那么我们就不应该使用controller_front_init_routers
事件是有效的,这是原始问题的场景。例如,如果此时您实例化customer/session
,您将无法再执行客户登录。艾伦在http://alanstorm.com/magento_sessions_early中指出了这一点。顺便说一句,感谢艾伦这篇伟大的文章。