2009-07-29 90 views
5

想想一個小的基本聯盟系統。我要像Magento路由器:如何捕獲所有網址中的參數?

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

每次afid的URL在URL中發現,一個方法應被調用(基本形成節約「AFID」在會話中,當客戶購買的東西,我想跟蹤它)。

有人在這裏誰知道如何做到這一點?每個提示都被接受;-)

回答

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

謝謝!那樣的方式;-) – Max 2009-07-30 07:13:57

1

我知道這是一個非常古老的答案,但如果我們打算在會話中存儲這些參數(這是原始問題的場景),則應該提及我們不應該使用controller_front_init_routers事件。例如,如果您在此時實例化customer/session,那麼您將無法再執行客戶登錄。 Alan自己在http://alanstorm.com/magento_sessions_early中指出了這一點。順便說一句,感謝艾倫這篇偉大的文章。