想想一個小的基本聯盟系統。我要像Magento路由器:如何捕獲所有網址中的參數?
www.myshop.com/mynewproduct.html?afid=123
每次afid
的URL在URL中發現,一個方法應被調用(基本形成節約「AFID」在會話中,當客戶購買的東西,我想跟蹤它)。
有人在這裏誰知道如何做到這一點?每個提示都被接受;-)
想想一個小的基本聯盟系統。我要像Magento路由器:如何捕獲所有網址中的參數?
www.myshop.com/mynewproduct.html?afid=123
每次afid
的URL在URL中發現,一個方法應被調用(基本形成節約「AFID」在會話中,當客戶購買的東西,我想跟蹤它)。
有人在這裏誰知道如何做到這一點?每個提示都被接受;-)
你不需要路由器。您需要設置一個事件偵聽器,用於觸發每次頁面加載,然後訪問請求集合中的變量。 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
可以被命名爲任何你想要的。
我知道這是一個非常古老的答案,但如果我們打算在會話中存儲這些參數(這是原始問題的場景),則應該提及我們不應該使用controller_front_init_routers
事件。例如,如果您在此時實例化customer/session
,那麼您將無法再執行客戶登錄。 Alan自己在http://alanstorm.com/magento_sessions_early中指出了這一點。順便說一句,感謝艾倫這篇偉大的文章。
謝謝!那樣的方式;-) – Max 2009-07-30 07:13:57