2009-07-29 21 views
5

Küçük ve basit bir ortaklık sistemi düşünün. BenMagento yönlendirici: Tüm URL'lerde parametreleri nasıl yakalarım?

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

Her zaman afid gibi bir URL yöntemi (temelde oturumda "afid" kaydetmek ve müşteri şeyler satın aldığında, bunu takip etmek istiyorum) çağrılmalıdır, URL'de bulunan istiyorum.

Burada nasıl yapılacağını bilen biri var mı? Her ipucu kabul edilir ;-)

cevap

20

Bunun için yönlendiriciye ihtiyacınız yoktur. Her sayfa yükü için tetikleyen bir olay dinleyicisi ayarlayıp ardından istek koleksiyonundaki değişkenlere erişmek istersiniz. Controller_front_init_routers olayı yapmalıdır.

Öyleyse aşağıdaki

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

Ve ile, kurulum modülün yapılandırma aşağıdaki sınıf istediğini interceptMethod adlandırılabilir

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

oluşturun.

+1

Teşekkürler! Bu yol ;-) – Max

1

Bunun çok eski bir cevap olduğunu biliyorum, ancak bu parametreleri oturumda saklamak istiyorsak, orijinal soru için senaryo olan controller_front_init_routers olayını kullanmamamız gerektiğini belirtmek için geçerlidir. Örneğin, bu noktada customer/session'u başlatırsanız artık bir müşteri girişi gerçekleştiremezsiniz. Alan bunu http://alanstorm.com/magento_sessions_early numaralı telefondan işaret etti. BTW, bu harika yazı için Alan'a teşekkürler.