ESC_0133.jpg DSC_0001.jpg DSC_0460.jpg

 i need more coffee

Atteint depuis mon plus jeune âge d'hippopotomonstrosesquippedaliophobie (cultivez vous ça ne fera pas de mal) j'ai décidé de faire un blog sur ma maladie (be feeeaar..).
Blague à part c'est un blog totalement axé génie logiciel que vous trouverez ici. Du PHP, du J2EE, et évidement toutes les technologies qui leur sont liées.

Have fun !

Mettre à jour le sitemap.xml automatiquement

6 février 2012Posté par : Kevin Danezis dans CmsMadeSimple

La mise à jour d'un sitemap.xml se révèle très vite chronophage pour ceux qui mettent à jour régulièrement le contenu de leur site. Et que dire des articles publiés régulièrement ?
Voici une petite astuce pour automatiquement indexer le contenu et les articles.

L'idée est de créer une UDT qui va se charger de ce refresh. Ensuite on utilise les évènements cmsmadesimple liés à la mise à jour des articles de News pour exécuter ce code.

Installez Sitemapmadesimple

Ben oui par ce que sans ce super module pour générer un sitemap vous allez pas aller bien loin.

Par défaut ce module va générer un fichier sitemap.xml qui contient le contenu des pages. News étant un module externe au système de contenu des pages, vos articles ne sont pas indexés par défaut. Pour résoudre ce petit problème il faut modifier le gabarit de sitemap-made-simple via Extensions » SiteMapMadeSimple.

Votre gabarit du sitemap doit ressembler à ceci :

 {foreach from=$output item='page'}
<url>  
 <loc>{$page->url}</loc>  
 <lastmod>{$page->date|date_format:"%Y-%m-%d"}</lastmod>  
 <priority>{$page->priority}</priority>  
 <changefreq>{$page->frequency}</changefreq></url>
{/foreach}
{capture assign='junk'}
 {cms_module module='News' detailpage='your-news-detail-page' number='1000'}
{/capture}
{foreach from=$items item='entry'}
<url>
 <loc>{$entry->moreurl}</loc>  
 <lastmod>{$entry->postdate|date_format:"%Y-%m-%d"}</lastmod>
 <priority>{$page->priority}</priority>  
 <changefreq>{$page->frequency}</changefreq>
</url>
{/foreach}
</urlset>

Une fois mis à jour, le code doit être enregistré.

Création de l' UDT "auto_sitemap"

 

Voici son code, inutile de modifier quoi que ce soit.

$gCms = cmsms();
$config = $gCms->GetConfig();

$sitemap = cms_utils::get_module('SiteMapMadeSimple');

$template = $sitemap->GetPreference('dflt_xml');   
 if( isset($params['template'] ) )     
 {
 $template = trim($params['template']);
   }
    $template = 'xml_'.$template;
    $xmlfile = $sitemap->ProcessTemplateFromDatabase($template);

$xmlfile = $sitemap->GenerateSiteMap($params);
if( !$sitemap->GetPreference('static_sitemap') )
  {
    $handlers = ob_list_handlers();
    for ($cnt = 0; $cnt < sizeof($handlers); $cnt++) { ob_end_clean(); }
    header("Content-Type: application/xml");
    echo $xmlfile;
    exit;
  }
// Generating a static sitemap
$fn = cms_join_path($config['root_path'],'sitemap.xml');
$f = @fopen($fn,'w');
@fwrite($f,$xmlfile);
@fclose($f);

Pareil, enregistrez simplement une fois le code saisit.

Liéer les évènements à cette UDT

Allez dans Extensions  » Gestion des événements et ajouter l'udt à cette liste d'évènements : NewsArticleAdded, NewsArticleDeleted, NewsArticleEdited.

Terminé ! maintenant votre sitemap sera regénéré dès qu'un article est ajouté, supprimé ou modifié.

Via : ce super blog

 

comments powered by Disqus