csv Dateien erstellen mit CakePHP (1.1)
Nachdem wir gestern ein Tutorial hatten “CSV Dateien einlesen mit CakePHP” folgt nun der umgekehrte Weg.
Problem: Wir haben Daten, die wir gerne nach Excel oder anderen Programmen exportieren und dafür aus den Tabellendaten eine CSV Datei erstellen möchen.
Lösung: CakePHP
Nehmen wir an, wir möchten folgende Tabelle als CSV Datei speichern:
| Vorname | Nachname | Firma |
|---|---|---|
| Max | Mustermann | Muster AG GmbH |
| Silke | Mustermann | Muster AG GmbH |
| Maria | Mustermann | Muster AG GmbH |
Diese Daten habe ich in der Tabelle Report gespeichert. Meine Controllerfunktion sieht nun folgendermaßen aus:
[app]/reports/reports_controller.php
-
function export() {
-
$reports = $this->Report->findAll();
-
$i=0;
-
foreach ($reports as $elem) {
-
//Gehe durch alle Reporte
-
foreach ($elem[‘Report’] as $elem2) {
-
$report_ausgabe[$i][] = $elem2;
-
}
-
$i++;
-
}
-
-
//Erstellen der CSV
-
$string = "";
-
//Erstellen des Headers
-
foreach ($reports[0][‘Report’] as $key=>$elem) $header_array[] = $key;
-
$string .= "\r\n";
-
-
foreach ($report_ausgabe as $elem) {
-
$string .= "\r\n";
-
}
-
}
Zuerst wird mittels findAll() die Tabelle vollständig in die Variable $reports eingelesen. Die Foreach Schleife danach kann genutzt werden, um weitere Daten mit auszulesen, die durch die Model Assoziationen mitgeliefert werden. Nach //Gehe durch alle Reporte könnte dort zum Beispiel stehen
-
$report_ausgabe[$i][] = $elem[‘User’][‘username’]
Nachdem die Daten nun geordnet wurden, wird der Header erstellt. Diese Foreach Schleife läd die Spaltennamen der Datenbank als erste Zeile in den Ausgabestring. Die Daten werden dabei mit ; getrennt, ein Zeilenende markiert “\r\n” (oder nur \n bei Linux).
Anschließend erfolgt derselbe Einlesevorgang mit den einzelnen Datensätzen. Nachdem alles geschehen ist, wird der String mittels file_put_contents im webroot/files/ Ordner abgespeichert.
Einfach, oder?
Abschlusstipp: Im View kann die Datei mit
-
<?php echo $html->link("Hier klicken um Download zu starten", "/files/report.csv");?>
angesprochen werden.
Kategorie: Allgemein, CakePHP | 1 Kommentar »
Veröffentlicht am Donnerstag, den 26. Juli 2007 um 17:09 Uhr veröffentlicht
Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.
