Feb
04

VCard oder RSS-Feed ?

Cake bietet mit seiner Router-Funktionalität die Chance ganz einfach neue Ausgabeformate zu definieren. Dem Router erklärt man erstmal mit

    Router::parseExtensions('rss', 'vcf');

auf welche Extensions er reagieren soll. RSS gehört dabei in Cake zu den Standardextensions, die über den RSS-Helper selbständig erzeugt werden kann. D.h. also, wenn

    http://meine.domain.de/products/index

einfach die Extension .rss an die Url angehängt wird

    http://meine.domain.de/products/index.rss

dann erkennt der Router die Erweiterung RSS in der URL und holt sich den RSS-View zur Ausgabe der Daten im RSS-Format. Normale Views finden sich in APP/views/products bezogen auf das obige Beispiel. Um nun die RSS-Ausgabe zu formatieren, erzeugt man einen zusätzlichen Unterordner APP/views/products/rss und legt dort für jeden gewünschten View, der als RSS-Feed erzeugt werden soll, eine entsprechende Datei. Also beispielsweise APP/views/products/rss/index.ctp und erzeugt mit Hilfe des RSS-Helpers die gewünschte Ausgabe.

Will man also auf die gleiche Weise statt einem RSS-Feed nun eine VCard von einem Kontakt erzeugen, dann geht man entsprechend vor. Zusätzlich benötigt man aber ein Layout für VCF-Dateien das man in APP/views/layouts/vcf/default.ctp anlegen muss. Dort hinterlegt man für die VCard die notwendigen Ausgaben, um das Format über den Browser auch richtig ausliefern zu können:

    Configure::write('debug', 0); // nur nötig, falls man im Debug-Mode arbeitet und trotzdem die Ausgaben testen will
    header(
        'Content-Type: application/directory; ' .
        'profile="vcard"; ' .
        'charset=' . $charset
    );
    header('Content-Length: ' . strlen($content_for_layout));
    header("Content-Disposition: $disposition; filename=\"$filename\"");
    echo $content_for_layout;
Oben