Symfony3 et Dpn XML Sitemap Bundle

Créer un sitemap est plutôt fastidieux : pas d’erreur de syntaxe, il change régulièrement surtout au début, on ne sait pas trop comment ça marche etc. Avec Symfony il y a un super bundle qui vous permet de le générer automatiquement DPN Xml Sitemap Bundle. Je vous encourage vivement à lire la doc (très simple) et à l’installer pour l’utiliser.
La fonction de base avec mise en place de paramètres dans les fichiers de touring est très pratique mais ne permet pas d’aller suffisamment loin pour le SEO (objectif du site tout de même). J’ai donc créé un controller permettant d’intégrer des routes spécifiques basées sur le contenu. Rien de bien sorcier, voici ma fonction generate :

public function generate()
 {
 $host='https://openentreprises.fr';
 $entries = array();
 $entries[] = new Entry($host.'/', null, 'daily', '1');
 $entries[] = new Entry($host.'/blog', null, 'daily', '0.8');
 $entries[] = new Entry($host.'/siren', null, 'monthly', '0.5');
 $entries[] = new Entry($host.'/denomination', null, 'monthly', '0.5');
 $entries[] = new Entry($host.'/regions', null, 'weekly', '0.8');
$m = $this->cache->getItem('regions')->get();

foreach ($m as $r) {
$entries[] = new Entry($host.'/region/'.$r['key'].'-'.$this->seoService->urlFilter(strtoupper($r['name'])), null, 'weekly', '0.6');
}

$m = $this->cache->getItem('ape_aggregate')->get();

foreach ($m as $r) {
$entries[] = new Entry($host.'/ape/'.$r['section'].'-'.$this->seoService->urlFilter(strtoupper($r['libelle'])), null, 'monthly', '0.6');
foreach ($r['categories'] as $cat) {
$entries[] = new Entry($host.'/ape/'.$r['section'].'/'.$cat["code"].'-'.$this->seoService->urlFilter($cat['libelle'], false), null, 'monthly', '0.6');
}
}

$m = $this->cache->getItem('ape')->get();

foreach ($m as $r) {
foreach ($r as $a) {
if(!is_array($a)) continue;
$entries[] = new Entry($host.'/code-ape/'.$a['ape'].'-'.$this->seoService->urlFilter($a['libelle'], false), null, 'monthly', '0.6');
}
}

return $entries;
}

 

J’utilise ici un système de cache sur lequel je reviendrai. Je vous laisse trouver le résultat 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *