Tuto-FR : SPIP - Créer un fichier XML simple sur une boucle événements (agenda 2.0)
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...
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...#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>
Publié le lundi 10 août 2009 par Matias Grenn
Commentaires
Bonjour Erwan. Merci pour ce tuto. On vient de me demander d'étudier la création automatique d'évenements Facebook à partir des événements du plugin Agenda d'un site Spip. Histoire que le groupe Facebook se synchronise automatiquement avec le travail fait sur le site, sans obliger à une double saisie.
N'étant pas familier de Facebook et encore moins de ses arcanes techniques (coté Spip, ça ira), saurais-tu me dire si une telle synchronisation est possible, si elle a déjà été tentée quelque part (je n'ai rien trouvé sur Internet pour le moment - ton tuto est le premier lien pertinent en la matière)... et si ça fonctionne !?
Merci de tes pistes et lumières!
Je n'ai pas encore fouillé dans l'API de Facebook pour voir si c'était assez ouvert pour rendre ce genre d'automatisation possible. Autant sur twitter il est possible de faire pas mal de choses, autant Facebook reste assez flou. Facebook récupère facilement un flux rss pour générer des articles automatiquement mais rien vu de tel sur les événements, ou imaginer l'inverse, que l'on puisse récupérer les événements de facebook en flux et l'intégrer sur un site...
A suivre donc.
J'ai d'ailleurs, dans la structure où je travaille, des questions similaires, donc je vais bientôt me pencher là-dessus.
Merci beaucoup pour ta réponse.
Je suis preneur de toute découverte ! ;-)
ça fera dès que possible le sujet d'un article... mais il faudra être patient
Génial ! Merci.
J'ai fait ceci avec le dewplayer (et le dew playlist : cela fonctionne avec la playlist xml sous SPIP) . Une playlist qui fonctionne très bien maintenant! J'avais déjà eu l'idée mais il me manquait cette astuce qui consistait à rajouter l'extensionhtml à la fin de playlist.xml.html !
Merci merci et encore merci ! :-)
de rien c'est avec plaisir que nous devons partager toutes nos trouvailles pour s'aider les uns les autres : prochain tuto sur comment monter un twittywall...