Préambule
J’ai décidé de faire un export « iCalendar » (anciennement « vCalendar ») de mon agenda simple pour SPIP.
Introduction
« iCalendar » est un format d’échange d’agenda, et permet de transférer des rendez-vous.
C’est à l’origine un format d’import/export de rendez-vous créé par un consortium Apple/AT&T/IBM/Siemens et principalement utilisé par une application sous Mac (iCal).
L’idée de réutiliser ce format d’échange a été adopté par quelques logiciels de calendrier comme Mozilla.
Pré-requis
Le seul pré-requis est d’avoir installé la contribution « Mini agenda ultra simple », et évidemment, de l’utiliser.
Cette contribution va vous permettre de faire une exportation de votre mini agenda au format iCalendar afin de le récupérer dans votre logiciel d’agenda favori.
Ajouter un filtre
Vous allez devoir ajouter un filtre dans votre fichier mes_fonctions.php3 comme suivant :
/*****************************************************************************/
/** Cette fonction permet de générer une date iCal au format Ymd
/**
/** Auteur : F. Quointeau
/** Version : 0.0.1
/** Date : 9 Juin 2004
/*****************************************************************************/
function date_ical_courte($date_heure, $jours = 0) {
return date("Ymd", mktime(0,0,0,mois($date_heure),jour($date_heure)+$jours,annee($date_heure)));
}
Ce filtre va être utilisé pour générer une date compatible avec le format d’export des données.
Le fichier agenda-ical.php3 :
Créez un fichier agenda-ical.php3 contenant le code php suivant :
J’ai donné un délai de 24 * 3600 ce qui donne une mise en cache d’une journée. Le fichier sera généré une fois par jour.
Par rapport à un fichier .php3 SPIP habituel, vous retrouvez en plus la ligne
@header ("content-type:text/calendar");
qui permet de spécifier que vous ne renvoyez pas une page HTML, mais un fichier de type « calendar ».
<?php
$fond = "agenda-ical";
$delais = 24 * 3600;
@header ("content-type:text/calendar");
$flag_preserver=true;
include ("inc-public.php3");
?>
Le fichier agenda-ical.html :
Voici le source du squelette proprement dit :
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
X-WR-CALNAME;VALUE=TEXT:[(#NOM_SITE_SPIP|filtrer_ical)]
X-WR-RELCALID;VALUE=TEXT:[(#URL_SITE_SPIP|filtrer_ical)]
VERSION:2.0
<BOUCLE_articles(ARTICLES) {tout} {par date_redac} {age_redac <= 0}>
BEGIN:VEVENT
SUMMARY:[(#TITRE|filtrer_ical)]
UID:article#ID_ARTICLE @ [(#URL_SITE_SPIP|filtrer_ical)]
DTSTAMP:[(#DATE_REDAC|date_ical)]
DTSTART;VALUE=DATE:[(#DATE_REDAC|date_ical_courte)]
DTEND;VALUE=DATE:[(#DATE_REDAC|date_ical_courte{1})]
LOCATION:[(#SOUSTITRE|filtrer_ical)] [ - Organisateur: (#SURTITRE|filtrer_ical)]
DESCRIPTION:[(#DESCRIPTIF|filtrer_ical)]
URL:#URL_SITE_SPIP/#URL_ARTICLE
STATUS:CONFIRMED
END:VEVENT
</BOUCLE_articles>
END:VCALENDAR
Convention pour l’écriture des articles
Autant sur votre site SPIP vous pouvez gérer les données de l’article à votre convenance, j’ai pour ma part utilisé un certain nombre de conventions :
- Le sous-titre de l’article correspond au lieu de l’événement
- Le sur-titre de l’article correspond à l’organisateur de l’événement
Résultat :
Voici ce que donne la récupération d’un événement avec Mozilla Calendar :
Pour information...
Un événement est noté pour une journée complète, puisque SPIP ne gère pas d’heure dans la date de publication.
L’échange de calendrier a été testé avec succès sur
- Apple iCal (sur un Mac OS X 10.3)
- Mozilla Calendar (suite Mozilla 1.6 sous Windoze XP)
Voici un exemple de synchronisation iCal :
http://www.ncrambouillet.info/spip/agenda-ical.php3
Cette url n’a évidemment pas d’autre intérêt que celui de tester le résultat !
Discussions par date d’activité
2 discussions
Testé avec Evolution : OK
c00l.
Thanks ;-)
Répondre à ce message
Dans ma rubrique Agenda de mon site, je publie des articles où l’heure est présente dans le DESCRIPTIF, au format « 20h00 »
J’ai donc ajouté $ mes-fonctions.php3 :
et dans agenda-html
Je suis un absolu newbie en prog, mais je me débrouille. La syntaxe parraît correcte. En tout cas, ça marche avec iCal 1.5.5
J’ai trouvé de la doc si vous souhaiter approfondir : http://xml.resource.org/public/rfc/html/rfc2445.html
Dans la même veine, on peux ajouter une durée de l’événement dans un autre champ, ou alors par mot-clé. Il y a plein de possibilités.
Evidemment, il faut que les rédacteurs soient disciplinés... :-)
cordialement, Alex
L’ agenda en question
Hum. C’est une très bonne idée pour enrichir mon mini-agenda et en faire un vrai calendrier !
Merci
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |