2009-07-29 25 views
5

Denken Sie an ein kleines und einfaches Affiliate-System. Ich mag eine URL wieMagento Router: Wie kann ich Parameter in allen URLs abfangen?

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

Jedes Mal afid in der URL gefunden wird, soll ein Verfahren genannt werden (im Grunde zu retten „afid“ in der Sitzung und wenn der Kunde Sachen kauft, ich will es verfolgen).

Jemand hier, wer weiß, wie man das macht? Jeder Hinweis wird akzeptiert ;-)

Antwort

20

Sie brauchen dafür keinen Router. Sie sollten einen Ereignis-Listener einrichten, der bei jedem Laden der Seite ausgelöst wird, und dann auf die Variablen in der Anforderungssammlung zugreifen. Das controller_front_init_routers-Ereignis sollte ausreichen.

So Setup Config Ihres Moduls mit dem folgenden

<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> 

und erstellen Sie die folgende Klasse

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 
    } 
} 

Die interceptMethod benannt werden kann, was auch immer Sie wollen.

+1

Danke! Das ist übrigens ;-) – Max

1

Ich weiß, dies ist eine sehr alte Antwort, aber es ist gültig zu erwähnen, dass wir das Ereignis nicht verwenden sollten, wenn wir diese Parameter in Sitzung speichern wollen, was das Szenario für die ursprüngliche Frage ist. Wenn Sie beispielsweise customer/session an dieser Stelle instanziieren, können Sie keine Kundenanmeldung mehr durchführen. Alan zeigte dies selbst in http://alanstorm.com/magento_sessions_early. BTW, danke Alan für diesen tollen Artikel.