Zend Framework et la réécriture d’url pour une page spécifique


Aujourd’hui nous allons voir comment réécrire une url avec le Zend Framework mais uniquement pour un page en particulier.

En général, sans rien toucher au Zend_Router de Zend, on obtient des adresses web de cette forme là :

http://www.monsite.com/monControlleur/monAction/monParam1/maValeur1/monParam2/maValeur2

Ce genre d’adresse n’est pas forcément optimiser pour le référencement car rappelons pour les initiés des techniques de référencement que Google apprécie particulièrement les adresses internet limitées à 4 sous dossiers . Ici, c’est trop !

Donc pour cela, nous avons une classe de Zend qui nous permet de spécifier une route (adresse) spécifique pour un controlleur et une action en particulier.

Dans le précédent billet, je vous expliquai le principe du controlleur frontal lors de l’implémentation de Zend pour notre site internet.

Pour le moment, dans notre exemple, les adresses ressemblent à cela :

http://www.monsite.com/produits/detail/id/monIdenNumero

Il suffit de faire comme cela :

  1. /*
  2. Ici on prépare la route, on instancie un route avec expression régulière
  3. qui peut comprendre n’importe quel caractère.
  4. Ensuite on passe en paramètre un tableau d’option :
  5. 1 correspond au premier paramètre pour eviter de faire id/1213
  6. controller et action : le controlleur a réécrire et l’action à réécrire
  7. */
  8. $route = new Zend_Controller_Router_Route_Regex(‘produit/(.+)’,array(
  9. 1 => ‘id’,
  10. ‘controller’ =>’produits’,
  11. ‘action’     =>’detail’)
  12. );
  13. // On instancie le controlleur frontal
  14. $frontController = Zend_Controller_Front::getInstance();
  15. // On récupère la router basique
  16. $router = $frontController ->getRouter();
  17. // On ajouter une route au router en spécifiant un paramètre et la route préparée
  18. $router ->addRoute(‘produit’,$route);
  19. // On spécifie le dossier des controlleurs
  20. $frontController->setControllerDirectory(‘./application/controllers’);
  21. $frontController->dispatch(); // On envoie l’application
/*
Ici on prépare la route, on instancie un route avec expression régulière
qui peut comprendre n'importe quel caractère.
Ensuite on passe en paramètre un tableau d'option :
      1 correspond au premier paramètre pour eviter de faire id/1213
      controller et action : le controlleur a réécrire et l'action à réécrire
*/
$route = new Zend_Controller_Router_Route_Regex('produit/(.+)',array(
	1 => 'id',
	'controller' =>'produits',
    'action'     =>'detail')
);
// On instancie le controlleur frontal
$frontController = Zend_Controller_Front::getInstance();
// On récupère la router basique
$router = $frontController ->getRouter();
// On ajouter une route au router en spécifiant un paramètre et la route préparée
$router ->addRoute('produit',$route);

// On spécifie le dossier des controlleurs
$frontController->setControllerDirectory('./application/controllers');
$frontController->dispatch(); // On envoie l'application

On aura donc maintenant une route qui ressemblera à cela :

http://www.monsite.com/produit/monIdenNumero

Parfait non? Enfin parfait pour ce que l’on cherchait à faire mais cela n’est pas entièrement optimisé pour le référencement car on affiche dans l’adresse un numéro et pas une chaine de caractère descriptive; je vous en parlerais prochainement dans un prochain billet!

J’espère que cela vous aura aidé dans votre quête de la perfection !

From dator.fr

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s