Zend Framework

Créer un sitemap

Après JQuery, je vais vous parler d’une chose importante pour un site, le Sitemap.

Comme vous le savez, les moteurs de recherche regardent votre sitemap pour pouvoir indexer toutes les pages présentes dessus.

Le problème qui se pose avec des pages en php, asp, jsp, c’est que notre site est dynamique. Pour chaque article sur notre blog, produit sur notre site d’e-commerce, de messages sur notre forum, ça nous rajoute 1 page. Assez embêtant à mettre à jour quand on rentre 20 nouveaux produits.

L’une des méthodes consiste à générer notre fichier quand on enregistre notre produit en base de données. Mais elle est assez lourde à mettre en place et enregistre un fichier sur le serveur.

La seconde, et sans doute la meilleure, est de redirigé le sitemap sur une page php, qui va nous lister le lien de chaque produit, tout en faisant croire que l’on est sur une page XML.

Nous allons donc voir comment créer un sitemap dynamique en utilisant Zend.

Vous devez d’abord savoir comment utiliser les classes Zend_Table_Abstract pour pouvoir parcourir la liste de vos produits.

Tout d’abord voici le contrôleur :
/**
* Classe servant à générer dynamiquement le sitemap.
*
* @version 0.1
* @author Throrin
* @package Sitemap
*
*/
class SitemapController extends Zend_Controller_Action
{
public function indexAction()
{
$this->_helper->layout()->disableLayout();

//on commence par récupérer tous les produits
$tableproduit = new TProduit();
$listeproduits = $tableproduit->fetchAll('ispublie=1');
//on dit que la vue est interprétée comme un type xml en changeant le header
$this->getResponse()->setHeader('Content-Type', 'text/xml; charset=UTF-8');

//on intègre la liste à la vue
$this->view->listeproduits = $listeproduits;
}
}

Je vais vous commenter chaque ligne avant de passer à la vue.

On commence donc en premier lieux à dire qu’on désactive le layout du site (si on en a un). Ensuite, on initialise notre table produit. De là, je lui dis de récupérer tous mes produits qui sont publiés.

Pour finir, je change le header de ma page afin de faire croire au navigateur que ma vue sera en XML et non en php.

Ensuite, on s’attaque à la vue qui ressemblera à ceci:
'."\n"; ?>



http://caratamp.fr


http://caratamp.fr/galerie


http://caratamp.fr/index/infoetlib


http://caratamp.fr/index/condgene


http://caratamp.fr/index/contact


http://caratamp.fr/galerie/rechercherapide


http://caratamp.fr/auth/login/

listeproduits as $unproduit)
{
?>

idProduit . '/Nom/' . $this->dellAccent($unproduit->Nom). '/Reference/' . $this->dellAccent($unproduit->Reference); ?>




Comme on peut le voir, on commence par donner l’en-tête, ensuite on donne les pages statiques et on finit par une boucle permettant de générer un lien par produit.

Maintenant que cette partie est faite, il faut pouvoir faire la redirection. Pour se faire, il faut toucher au fichier .htacces de Zend puis au bootstrap.

Dans le .htaccess, vous devez faire ce qui suit afin de faire pointer les robots (google, yahoo, …) vers un faux sitemap.xml qui lui, ramènera vers votre contrôleur Sitemap:
RewriteRule ^(.*)sitemap.xml$ /sitemap/index [L]
Pour le bootstrap, on va rajouter une autre réécriture de lien grâce à la classe Zend_Route. Par contre, l’exemple illustré dessous était pour Zend 1.7. Le passage vers la 1.8 ne devrait pas poser de problèmes. Quand je l’aurais fait, je modifierai l’article pour vous donner ma solution.
$router = $frontController->getRouter();
$router->addRoute(
'manageSitemap',
new Zend_Controller_Router_Route('sitemap.xml', array('controller'=>'sitemap','action'=>'index'))
);

Comme on peut le voir, notre route est toute simple, on dit que quand on cherche sitemap.xml, on est redirigé vers notre contrôleur.

Voilà, j’espère avoir pu vous aider sur ce sujet. Si vous avez des questions n’hésitez pas.