Images, Sitemap et SPIP
9 avr. 2010
Par Matias Grenn - Spip - Lien permanent
(Mise à jour du 22 avril 2010 avec le signalement aussi des vidéos)
(Mise à jour du 3 et 5 mai 2010 avec exemple de fichier sitemap pour spip en PJ et ajout de la fonction url_de_logo dans le fichier mes_fonctions.php)
Suite à l'article du site d'abondance.com, je vous propose un petit tutoriel pour l'automatiser dans le sitemap par défaut proposer dans SPIP 2. Le code doit ressembler à ceci :
<url>
<loc>http://example.com/sample.html</loc>
<image:image>
<image:loc>http://example.com/image.jpg</image:loc>
</image:image>
</url>
Un autre tuto avec d'autres balises à prendre en compte sur le site de webrankinfo.com.
Pour rajouter par exemple l'url du logo des articles dans le sitemap, il suffit de faire une copie dans "squelettes" de l'original "sitemap.xml.html" qui se trouve dans "squelettes-dist".
Dans le fichier vous cherchez l'emplacement de la boucle "articles" annoncée par [(#REM) Articles ].
Mon code pour le moment en test est le suivant :Il suffit maintenant de faire un appel du logo :[(#REM) Articles ]
[(#SET{recent,[(#VAL{'Y-m-d H:i:s'}|date{[(#DATE|affdate{U}|moins{86400})]})]})]
<BOUCLE_a(ARTICLES){!par date_modif}{!par date}{0,2000}>[
<url><loc>(#URL_ARTICLE|url_absolue)</loc>[(#DATE_MODIF|>{#GET{recent}}|?{[<lastmod>(#DATE_MODIF|date_iso)</lastmod>]})]</url>]</BOUCLE_a>[<image:image>
<image:loc>#URL_SITE_SPIP/(#LOGO_ARTICLE_RUBRIQUE||url_de_logo)</image:loc>
</image:image>]
Vous verrez apparaître une erreur car la fonction "url_de_logo" n'est pas implantée en natif dans spip. Il vous faut pour cela ajouter au fichier "mes_fonctions.php" dans squelettes (ou créer ce fichier) en y mettant le code suivant :<?php
function url_de_logo($texte) {
ereg("src=\"([^\"]*)\"", $texte, $regs);
return $regs[1];
}
?>
Si l'article possède un logo celui apparaîtra avec son url complète. Si vous voulez ensuite y ajouter toutes les images associées à l'article, il suffit de créer une autre boucle "documents" :<BOUCLE_mesimages(DOCUMENTS){id_article}{extension==jpg|png|gif}{mode=document}>
<image:image>
<image:loc>[(#URL_DOCUMENT|url_absolue)]</image:loc>
[<image:caption>(#DESCRIPTIF|textebrut)</image:caption>]
[<image:title>(#TITRE|textebrut)</image:title>]
</image:image></BOUCLE_mesimages>
Et voilà le tour est joué ! Encore une fois SPIP est simple à adapter mais pourtant vous allez voir une erreur à l'affichage car le navigateur ne reconnaitra pas la balise <image:image>. Pour cela il faut chager une ligne dans le sitemap.xml.html :<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
Normalement après ça tout fonctionne...
Pour référencer les vidéos, si comme moi vous passez par un service comme viméo, le tour est un peu plus complexe et je ne suis pas encore certain d'avoir trouver la solution.
Vous pouvez allez voir le modèle à suivre ici sur la page sitemap video de google.
Idem que pour les images ne pas oublier de mentionner la balise vidéo :<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
J'ai plus qu'une hésitation sur le content_loc et le player_loc par rapport à viméo. Pour une vidéo hébergé chez soi il suffit de donner l'url du player et l'url de la vidéo/<BOUCLE_video(DOCUMENTS){id_article}{extension==swf}{mode=document}>
<video:video>
<video:content_loc>[(#URL_DOCUMENT|url_absolue)]</video:content_loc>
<video:player_loc allow_embed="yes" autoplay="ap=1">[(#URL_DOCUMENT|url_absolue)]</video:player_loc>
<video:thumbnail_loc>[(#LOGO_DOCUMENT||extraire_attribut{src}|url_absolue)]</video:thumbnail_loc>
[<video:description>(#DESCRIPTIF|textebrut)</video:description>]
[<video:title>(#TITRE|textebrut)</video:title>]
</video:video></BOUCLE_video>



