Navigation
Drupalmodule
Drupalnews und Drupalblogger
Zip-Erstellung und Download in Drupal7

Ich habe heute für die Verwaltung bzw. unserem Webservice von RoboTagger.com eine Zip-Generierung und Download erstellt.
Welches ich natürlich nicht der Drupal-Gemeinde vorenthalten will, vielleicht hilft es dem einen oder anderen.
Wir gehen davon aus, es ist bereits ein Menüpfad via hook_menu registriert, welches die Funktion aufruft etc. Der Code ist natürlich so nicht fertig, sondern soll nur als Grundbaustein dienen.
Die benutze Klasse ZipArchive ist erst ab >= php 5.2 vorhanden. (http://de.php.net/manual/en/class.ziparchive.php)
Mit der Methode addEmptyDir() definieren wir eigentlich nur Ordner im Archiv, in der wir dann Dateien reinpacken.
In diesem Beispiel wird eine Datei von der Klasse selbst im Archiv angelegt und zwar mit der Methode addFromString(), welches nur den Dateiname und Inhalt also Parameter benötigt.
Sollte die Datei innerhalb eines Ordners angelegt werden, setzen wir den Ordnername einfach vor dem Dateiname. Beispiel : Unterordner/bar.txt.
Ebenfalls können wir bestehende Dateien mit der Methode addFile(), die sich bespielsweise im files-Ordner befinden dem Archiv, hinzufügen.
Zum Schluß wird via file_transfer(); die Datei an den Browser übermittelt. Wichtig war hier das Schema (Streamwrapper), welches ja Neu in Drupal7 ist.
Das wars eigentlich auch schon. Viel Spaß.
Grundbaustein:
- function _mymodule_zipdownload() {
- $zip = new ZipArchive();
- $res = $zip->open($zipfile, ZIPARCHIVE::OVERWRITE);
- if ($res !== TRUE) {
- drupal_set_message('Zipfile konnte nicht erstellt werden.', 'error'); // t()-Funktion verwenden, wenn es auch nicht Deutsch verstehende Menschen verstanden werden sollte ;-)
- return '';
- }
- $zip->addEmptyDir('Unterordner');
- foreach ($contents as $filename => $content) {
- $zip->addFromString($filename, $content);
- }
- $bestehendedatei = '/bar/foo.txt');
- foreach ($files as $filename => $file) {
- $zip->addFile($file, $filename);
- }
- $zip->close();
- // die funktion braucht ein schema
- file_transfer('temporary://' . basename($zipfile), array('Content-type' => 'application/zip', 'Content-Disposition' => "attachment; filename=export.zip", 'cache-control' => 'must-revalidate'));
- }
Re: Zip-Erstellung und Download in Drupal7
Kleiner Fuscher - t() :D
Re: Zip-Erstellung und Download in Drupal7
Habe mal ein Kommentar im Code hinzugefügt ;-)