Un tout petit exemple de simplicité pour créer un fichier XML destiné à alimenté le contenu d'un widget

Il y a quelques mois, j'ai créé pour le widget des Champs Libres, une console d'administration avec CakePHP, permettant d'alimenter le calendrier du widget par le biais d'un fichier XML. Ce fichier XML répondait à une demande précise de Manu Lechat qui a réalisé le widget en flash pour Kerozen. Je réalise actuellement deux sites événementiels pour les prochaines expositions du musée de Bretagne et je souhaite tout simplement que SPIP me génère un fichier XML du même format pour ne pas avoir à resaisir toutes les informations de l'agenda dans la console d'administration du widget.
La réalisation est assez simple en fait. Comme il manque des champs de saisies dans la boucle événement de l'agenda 2.0, je récupère directement sur l'article les éléments qu'il me manque (surtitre et soustitre) mais à vous d'adapter cette proposition en fonction de vos besoins. Il est très simple sur un widget avec google gadget ou netvibes de récupérer ces infos et de les mettre en valeur comme le fait le widget des Champs Libres.
Le fichier est situé dans le dossier squelettes avec le nom agenda.xml.html que vous appelez avec l'url spip.php?page=agenda.xml, soit, si votre hébergement le permet, grâce à une réécriture dans le htaccess directement agenda.xml.
Une fois déclaré à SPIP le format XML (2 premières lignes), il suffit de créer une boucle encadrant les balises qui devront être répétées autant de fois qu'il y a d'événement. Vous pouvez retrouvez à l'intérieure d'une boucle événement l'identifiant de l'article (pour l'exemple c'est un article mais on peut aussi le faire sur une rubrique) #ID_ARTICLE, ce qui permet de récupérer d'autres éléments par l'intermédiaire d'une boucle article dans la boucle événement. On peut encore simplifier le code ci-dessous en ne faisant qu'une boucle article qui irait chercher le surtitre et le soustitre ce qui évite de faire un appel supplémentaire au serveur...
#HTTP_HEADER{Content-Type: text/xml; charset=utf-8} <?xml version="1.0" encoding="utf-8"?>
<agenda> <category id="22" title="[(#NOM_SITE_SPIP|textebrut)]"> <BOUCLE_evenements(EVENEMENTS) {par date}{statut=publie}> <actu> <date>[(#DATE_DEBUT|annee)][(#DATE_DEBUT|mois)][(#DATE_DEBUT|jour)]</date> <heure>[(#DATE_DEBUT|heures)]h[(#DATE_DEBUT|minutes)]</heure> <BOUCLE_surtitre(ARTICLES){id_article}><surtitre>#SURTITRE</surtitre></BOUCLE_surtitre> <titre>#TITRE</titre> <BOUCLE_soustitre(ARTICLES){id_article}><soustitre>#SOUSTITRE</soustitre></BOUCLE_soustitre> <lieu>#LIEU</lieu> <lien>[(#URL_ARTICLE|url_absolue)]</lien> <description>#DESCRIPTIF</description> </actu> </BOUCLE_evenements> </category> </agenda>
Le "id" de la balise category ne sert pas à grand chose ici, c'est un élément qui sert à distinguer différents agenda dans la console réalisé avec CakePHP. Le site sous SPIP ne propose l'agenda que d'une exposition donc l' "id" ne sert à rien...