Accueil du site > SPIP > La boucle iCalendar

La boucle iCalendar

samedi 25 décembre 2010, par Fil

Le plugin icalendar, disponible sur la zone, permet de lire et d’afficher des calendriers au format ics via la boucle (DATA).

Le plugin icalendar contient la librairie iCalcreator de Kjell-Inge Gustafsson (disponible sur le site http://www.kigkonsult.se/iCalcreator/ en licence GNU/GPL 2.1 ou ultérieure). Cette librairie permet notamment d’écrire et de lire des fichiers au format iCalendar (RFC 2445). C’est le format d’échange qu’utilisent la plupart des logiciels de calendrier, qu’ils soient « de bureau » ou « en ligne ». Vous pouvez utiliser ce plugin pour exploiter la librairie en PHP.

Mais le plus intéressant de ce plugin est peut-être le format qu’il offre pour la boucle (DATA) (cf. Exemples de BOUCLE(DATA) ).

Avec ce format il devient possible de boucler sur les événements d’un calendrier géré depuis un logiciel spécialisé, ou publié sur un site internet.

Voici un exemple de boucle en faisant usage.

Boucle :

<BOUCLE_vacances(DATA)
{source ics, http://media.education.gouv.fr/ics/Calendrier_Scolaire_Zone_B.ics}
{par dtstart/str}
>
<dt>
[(#SET{date,#VALEUR{dtstart/str}})]
[(#GET{date}|jour) ][(#GET{date}|nom_mois)]
[(#SET{date,#VALEUR{dtend/str}})]
[ &mdash; (#GET{date}|jour) ][(#GET{date}|nom_mois)]
</dt>
<dd>[(#VALEUR{summary/value}|replace{- Zone.*$})]</dd>
</BOUCLE_vacances>

Résultat :

18 décembre — 3 janvier
Vacances de Noël
19 février — 7 mars
Vacances d'hiver
16 avril — 2 mai
Vacances de printemps
2 juillet — 5 septembre
Vacances d'été
22 octobre — 3 novembre
Vacances de la Toussaint

(Une fois le plugin installé, vous pouvez visualiser l’adresse spip.php?page=demo/iterateurs&demo=iter_icalendar pour une version élaborée de cet exemple.)

Données accessibles

Comme le montre l’exemple ci-dessus, la date de début de chaque événement se trouve au format YYYY-MM-DD hh:mm:ss dans le datapath (chemin XPath) dtstart/str.

Pour aller plus loin on peut aussi récupérer l’année, le mois etc. dans les variables dtstart/value/year, dtstart/value/month et dtstart/value/day, dtstart/value/hour, dtstart/value/min, dtstart/value/sec et dtstart/value/tz (time zone).

La date de fin figure, de même, dans le tableau dtend ; la définition du format ics veut que, lorsque l’événement dure une journée entière, dtend soit la date du lendemain (autrement dit, on indique mardi à 00h00 plutôt que lundi à 23h59).

Pour trier par date de début de l’événement, on utilisera :
{par dtstart/str}.

Le résumé (titre) de l’événement se trouve dans summary/value.

Les données possibles sont nombreuses ; pour les explorer dans une boucle icalendar, il suffit d’indiquer [<pre>(#VALEUR|print_r{1})</pre>]. On voit alors apparaître un enregistrement complet, où l’on peut lire le datapath de chaque élément.

Par exemple, le code ci-dessous indique que le contenu du champ description peut s’obtenir via #VALEUR{description/0/value} :

   [description] => Array
       (
           [0] => Array
               (
                   [value] => Vacances d'hiver
                   [params] =>
               )

       )

En procédant ainsi on peut trouver notamment :
— created : date de création de l’événement dans le calendrier ;
— lastmodified : date de mise à jour de l’événement ;
— location/value : lieu de l’événement ;
— uid/value : identifiant unique de l’événement ;
— rrule/0/value/FREQ : fréquence de récurrence (pour les événements se répétant à intervalle défini)
— etc.

 

Si vous utilisez ce plugin, n’hésitez pas à partager vos trouvailles dans le forum ci-dessous.

5 Messages de forum

  • La boucle iCalendar Le 26 décembre 2010 à 10:44 , par Beurt

    On veut un plugin qui intègre les boucles DATA !

    On veut un plugin qui intègre les boucles DATA !

    On veut un plugin qui intègre les boucles DATA !

    On veut un plugin qui intègre les boucles DATA !

    On veut un plugin qui intègre les boucles DATA !

    On veut un plugin qui intègre les boucles DATA !

    On veut un plugin qui intègre les boucles DATA !

    On veut un plugin qui intègre les boucles DATA !

     :-)

    • La boucle iCalendar Le 27 décembre 2010 à 00:51 , par Fil

      Comme c’est encore noël, j’ai déposé le plugin itérateurs sous le sapin. Avec de jolies démos.

      http://zone.spip.org/trac/spip-zone/browser/_plugins_/iterateurs/

    • La boucle iCalendar Le 27 décembre 2010 à 11:20 , par Beurt

      ...

      je ne sais que dire sinon : Merci !!!

      Je tester ça avec plaisir ! Je crois qu’on a là un nouveau départ pour Spip tant les applications possibles sont nombreuses (sans parler du fait qu’on puisse désormais faire des boucles « pour » avec).

  • La boucle iCalendar Le 18 août 2011 à 09:07 , par denis

    Est-ce qu’on peut mettre plusieurs sources de fichier ics dans la même boucle ?

  • La boucle iCalendar Le 18 octobre 2012 à 10:59 , par Jérôme

    Pourquoi la boucle Data appliquée aux calendriers ics ne fonctionne pas dans Spip 3 ?