Pra onde vamos ? :: Modificar os links de suas paǵinas com roteamento estático

É comum que as vezes precisamos mudar o endereço de uma página em particular de nossa aplicação, de forma a ser mais amigável.

Por exemplo, se tivermos "por acaso" uma url da forma

http://meusite.com/secao1/secao2/secao3/secao4

mas a página "secao4" é tão importante, que precisamos facilitar sua escrita na url ( por questões de SEO ) da forma mais simples possível, assim
 
http://meusite.com/mysection

ou seja, queremos que a url "secao1/secao2/secao3/secao4" tenha o nome "mysection" mas que aponte para "secao1/secao2/secao3/secao4".

Para fazer isso, é muito simples.
Num cenário de exemplo, temos os seguintes links que queremos mudar as urls

http://meusite.com/secao/subsecao1
http://meusite.com/secao/subsecao2
http://meusite.com/secao/subsecao3

e queremos mudar para

http://meusite.com/mysection1
http://meusite.com/mysection2
http://meusite.com/mysection3

Para fazer isso, coloque em seu 'Bootstrap.php'


//
// Inicializa o rotamento pelo bootstrap.
// 
protected function _initRouter(){
		
     // Pega a instância do controller.
     $front_controller = Zend_Controller_Front::getInstance();
     $router = $front_controller->getRouter();
		
     // Cria os alias para os roteamentos.
     $link1  = new Zend_Controller_Router_Route_Static('mysection1',array('controller' => 'secao', 'action' => 'subsecao1') );
     $link2  = new Zend_Controller_Router_Route_Static('mysection2',array('controller' => 'secao', 'action' => 'subsecao2') );		
     $link3  = new Zend_Controller_Router_Route_Static('mysection3',array('controller' => 'secao', 'action' => 'subsecao3') );
		
     // Adiciona as rotas.
     $router->addRoute('myroute1', $link1);
     $router->addRoute('myroute2', $link2);
     $router->addRoute('myroute3', $link3);		
}

Explicando: '$link1' é o roteamento do endereço '/secao/subsecao1' para o nome 'mysection1' e 'myroute1' é o nome do roteamento que você irá usar para o zend_navigation.

Sim, se você criou menus com o zend_navigation, vai ter de mudar umas coisinhas se não quiser ter problema.

Supondo que você criou seus menus com um arquivo xml, então você deve ter uma seção para o link '/secao/subsecao1' dessa forma


secao
subsection1

Agora não têm mistério, basta acrescentar '<route>myroute1</route>' nessa parte de seu xml:

secao
subsection1
myroute1

e o link do menu irá pegar o roteamento para 'secao/subsection1'.
Nos outros links do menu, você DEVE acrescentar '<route>default</route>' , pois se não fizer isso, todos os links do menu vão ser roteados para o último router que você definiu no Bootstrap.

Para outros links normais de seu site que apontem para '/secao/subsecao1', não é preciso modificar nada, pois o roteamento é automatico para eles.

Esse roteamento do zend é estático, isso é, apenas para links que não requerem parâmetros. Para outros tipos de roteamento, aguarde próximos artigos.

Até lá =)



Referências:

Zend Manual : The standart router
 

Comentários