PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

iCal-Dateien generieren mit PHP

Komfort bemerkt man nicht. Er ist einfach da oder eben nicht. Wenn man Ihn nicht mehr hat, vermisst man ihn schmerzlich - Wikipedia definiert Komfort unter anderem damit, das bestimmte Geräte oder Funktionen die Arbeit vereinfachen…

Alles nix neues? Genau - obwohl jeder weiß, was Komfort ist, werden viel zu wenig Websites komfortabel gestaltet oder mit schlanken, schnellen und vor allem komfortabelen Funktionen ausgestattet. Schnell werden feine Funktionen als Luxus deklariert und ins dunkle Entwickler-Kämmerlein eingesperrt: Die Usability leidet.

Eine Möglichkeit, seinen Benutzern die Usability zu erleichten, kann bedeuten, Events aus einem Terminkalender downloadbar zu machen. So ziemlich jedes aktive Unternehmen, das sich zeitgemäß im Internet präsentiert, stellt seinen Benutzern eine Terminliste bereit.

Was könnte man dort Sinnvolles reinpacken?

  • Messetermine mit Standposition
  • Termine von Weiterbildungsseminaren
  • Sonstige Events / Veranstaltungen
  • Happy-Hours (z.B. bei Gastronomien)
  • Betriebsferien

Jede beliebige Newsliste mit einem downloadbaren Event auszustatten, wäre sicherlich etwas übertrieben. Mal kurz überlegen schadet hier also nicht.

Welches Format wäre wohl das Richtige? Okay, wer kurz in den Titel schaut, hat es schnell raus - iCal wäre das Format der Wahl, wenn es um downloadbare Dateien gehen soll. So ziemlich jeder Kalender kann es (Outlook, iCal, Gmail und viele weitere) - gute Voraussetzungen also, oder?

Prinzipiell gibt es zwei Möglichkeiten:

  1. Man exportiert eine statische Datei aus seinem Kalender und verlinkt sie mit dem Event auf der Website oder
  2. Man generiert aus seiner CMS-Datenbank eben mal schnell eine iCal-Datei.

Auch hier hilft der Titel weiter ;) Wir schauen uns mal einen Generator für PHP an: die Klasse iCalcreator hilft uns weiter. Die Webseite sieht zwar ziemlich beschissen aus und die Dokumentation ist auch etwas spärlich - trotzdem eröffnet uns das Tool viele Möglichkeiten. Denn es ist ziemlich flexibel, was die Ausgabe und Formatierung angeht.

Mit einigen wenigen Zeilen hat man das Objekt initialisiert:

$v = new vcalendar();
$v->setConfig('unique_id', 'phpblogger.net');
$v->setProperty('method', 'PUBLISH' );

Neue Events werden auch ziemlich easy erzeugt:

$vevent = new vevent();
$vevent->setProperty('DTSTART;VALUE=DATE', date("Ymd", $ts));
$vevent->setProperty('DTEND;VALUE=DATE', date("Ymd", $ts));
$vevent->setProperty('SUMMARY', $title);

Mit…

$v->setComponent($vevent);

…wird der Decorator bestückt und via…

$v->returnCalendar();

…an den Browser weitergeleitet. Das obige Beispiel zeigt gleich, wie man einen mehrtägigen Event ohne Uhrzeit generiert (Was im Howto der Klasse leider fehlt).

Natürlich sind auch Events möglich, die nur wenige Stunden oder Minuten dauern, Wiederholungen aller Art und ganze Sammelkalender (Wer mehr als einen Termin in eine Kalenderdatei packen möchte.

Wer Applikationen baut, kann sicher jede Menge Anwendungsfälle entdecken, den generierte iCal-Files lassen sich auch an Mails anhängen oder twittern.

Ähnliche Artikel:

  1. Zufalls-Passworte zu generieren
  2. jQuery Update
  3. RSS Feeds mit PHP generieren

unset meint dazu:

28. April 2009 um 12:55

Warum muss man die Daten denn in einem so umständlichen Format an die Klasse übegeben. Das hätte man aber auch schöner machen können …

timi meint dazu:

28. April 2009 um 13:01

Der iCalcreator ist sehr anpassungsfähig und kann so ziemlich jeden (auch undokumentierten) iCal-Tag schreiben. Das macht gerade dieses flexible, vielleicht umständliche Interface aus.

Aber mal im Ernst: Wer bindet einen solch rudimentären Serialisierer schon direkt in seine Applikation oder Framework ein? Da wäre man doch viel zu unflexibel. Ich verwende den iCalcreator hinter einem eigenen Adapter-Interface, genau wie Mailkomponenten und Ähnliches…

Dirk Ginader meint dazu:

28. April 2009 um 18:49

Hast Du herausfinden können wie man Zeitzonen angeben kann (Also sowas in Stil von: “dieser Termin startet um 15:00 Uhr GTM”)? Damit jemand der diese ICAl Datei in Deutschland importiert auch die entsprechende konvertierung angezeigt bekommt.
Irgendwie war ich bisher unfähig diese info zu finden.

Markus Paul meint dazu:

28. April 2009 um 22:41

Hab grad mal dein Beispiel überflogen, kann es sein das da ein paar Klammern fehlen?

$vevent->setProperty(’DTSTART;VALUE=DATE’, date(”Ymd”, $ts);
$vevent->setProperty(’DTEND;VALUE=DATE’, date(”Ymd”, $ts);

wird sicher zu

$vevent->setProperty(’DTSTART;VALUE=DATE’, date(”Ymd”, $ts));
$vevent->setProperty(’DTEND;VALUE=DATE’, date(”Ymd”, $ts));

timi meint dazu:

29. April 2009 um 09:50

@Markus, danke für den Hinweis, hast natürlich recht…

@Dirk: Man kann Zeitzonen definieren, in dem man die Komponente VTIMEZONE verwendet (siehe http://www.kanzaki.com/docs/ical/vtimezone.html). In den Eigenschaften DTSTART/DTEND wird dann die Timezone-ID referenziert, die Du vorher definiert hast. Wie mächtig das iCal-Format ist, kann man sich unter anderem bei Kanzaki anschauen: http://www.kanzaki.com/docs/ical/

Dirk Ginader meint dazu:

29. April 2009 um 10:25

@timi
Klasse! Danke für den sehr hilfreichen Tipp! Danach hatte ich echt lange gesucht und nix gefunden :-)

iCal-Support für die FMDB at Finger sind zum bloggen da meint dazu:

30. April 2009 um 09:32

[...] lange hatte ich vor, mittels iCal Daten zur Verfügung zu stellen und dank dem Hinweis hier, war es auch ruck-zuck erledigt. Den Link zum Kalender findet ihr im Soundtrack [...]

Bookmarks for 26.04.2009 through 03.05.2009 » mafflog meint dazu:

3. Mai 2009 um 17:12

[...] PHP Blogger: iCal-Dateien generieren mit PHP - Ein PHP Blog auf deutsch - [...]

butzi meint dazu:

4. Mai 2009 um 10:27

Sehr fein, genau so ein Feature hat mir auch noch gefehlt, werds mir mal bookmarken und bei gelegenheit was zusammenbasteln :-)

Danke für den Hinweis

Max meint dazu:

4. Mai 2009 um 18:55

Könnte stimmen

Georg P meint dazu:

5. August 2009 um 14:41

Super, genau das habe ich ncoh gesucht. Muss ich mich aber auch erstmal näher mit befassen und dann mal testen.

Super Einträge! Macht weiter so.

amyc meint dazu:

17. September 2010 um 10:38

Zurzeit habe ich meine *.ics Datei auf einem http://FTP. Da der Server php beherrscht, suche ich ein Tool, damit ich Lightning die (selbst signierte) https Adresse übergeben kann. Kennt wer so ein Programm?

RSS für Kommentare zu diesem Artikel · TrackBack URI

Schreib Deine Meinung