Download Infos Snippet
von Hannes am 28.10.2011 in My Modx mit 0 Kommentaren
Tweet
Dateien zum Download werden für gewöhnlich per Link bereitgestellt. Damit sich aber der Besucher sicher sein kann, was er nun runterlädt, wie groß die Datei und wie aktuell sie ist bedarf es eines kleinen Snippets, das diese Informationen bereitstellt.
Der Lösungsansatz
Im Grunde erledigt ein Snippet die ganze Aufgabe. Wie werden dazu noch ein paar Platzhalter, sogenannte Placeholders, definieren und müssen auch eine Template Variable anlegen, die als Typ "Datei" ausgewiesen wird und den Pfad der Datei ausgibt. Aber zuerst soll das Snippet folgen, bevor der Template Chunk angelegt wird und wir mit dem eigentlichen Aufruf des Snippets alles finalisieren.
getFile Snippet
<?php
$datei = "$data";
$filesize = filesize("$datei");
$byte = $filesize;
$kb = $filesize/1024;
$kb = round($kb,2);
$mb = $kb/1024;
$mb = round($mb,2);
$filedate = filectime ("$datei");
$date = date("d.m.Y",$filedate);
// Auswertung
if ($byte > 1024) {
$size = "$kb kb";
} else {
$size = "$byte bytes";}
if ($kb > 1024) {
$size = "$mb mb";
} else {
$size = "$kb kb";}
//Templating
$tpl = $modx->getOption('tpl',$scriptProperties,'getFileTpl');
// Aufstellung der "Placeholders"
$modx->setPlaceholder('bytes', $byte);
$modx->setPlaceholder('kilobytes', $kb);
$modx->setPlaceholder('megabytes', $mb);
$modx->setPlaceholder('size', $size);
$modx->setPlaceholder('date', $date);
//Gib mir aus, was ich will.
$output = $modx->getChunk($tpl);
return $output;
Anlegen des Chunks und der Template Variable
Soweit im Snippet später die &tpl Variable nicht angefasst wird referenziert getFile auf einen Chunk namens "getFileTpl". Diesen legen wir auch an und können nun mit den Placeholder spielen:
hochgeladen am [[+date]] und [[+size]] groß
[[+size]] ist ein dynamischer Platzhalter. Wer dagegen jede Datei in Bytes, Kilobytes oder Megabytes ausgespuckt haben will kann folgende Placeholder benutzen: [[+bytes]], [[+kilobytes]] oder [[+megabytes]]. Zum Schluss legen wir noch eine Template Variable mit dem Titel "downloadFile" an und weisen sie, wie oben beschrieben, dem Typ "Datei" zu.
Aufruf des Snippets
Zu guter letzt der Knalleffekt: Wir rufen das Snippet an der gewünschten Stelle auf.
<a href="[[*downloadFile]]">Download</a> <span>[[!getFile? &data=`[[*downloadFile]]` &tpl=`getFileTpl`]]</span>












