2009-07-29 4 views
5

Подумайте о небольшой и базовой партнерской системе. Я хочу URL какMagento router: Как я могу улавливать параметры во всех URL-адресах?

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

Каждый раз, когда afid находится в 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

1

Я знаю, что это очень старый ответ, но мы можем не упомянуть, что мы не должны использовать событие controller_front_init_routers, если мы намерены хранить эти параметры в сеансе, что является сценарием для исходного вопроса. Например, если вы создаете экземпляр customer/session на этом этапе, вы больше не сможете выполнять вход в систему. Алан указал на себя в http://alanstorm.com/magento_sessions_early. Кстати, спасибо Алан за эту замечательную статью.