WBCE CMS – Way Better Content Editing.
You are not logged in.
Pages: 1
Hi Zusammen
Nachdem wir das Droplet "Dirlist" schon fast perfektioniert haben, denke ich, können wir es hier noch etwas weiter entwickeln.
[== PHP ==]
$file_array = array();
// add trailing slash if missing
if (substr($pfad, -1) != "/") $pfad .= "/";
// open directory for reading
$d = new DirectoryIterator($pfad) or die("getFileList: Failed opening directory $pfad for reading");
foreach ($d as $fileinfo) {
// skip hidden files
if ($fileinfo->isDot()) continue;
// human readable filesizes
$precision = 2;
$units = array('B', 'KB', 'MB', 'GB', 'TB');
$bytes = $fileinfo->getSize();
$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
$pow = min($pow, count($units) - 1);
$bytes /= pow(1024, $pow);
$file_array[] = array(
'name' => "{$pfad}{$fileinfo}",
'type' => ($fileinfo->getType() == "dir") ? "dir" : mime_content_type($fileinfo->getRealPath()),
'size' => round($bytes, $precision) . ' ' . $units[$pow],
'lastmod' => $fileinfo->getMTime()
);
}
$file_list = '';
$file_list .= "<div class=\"dirlist\">\n";
$file_list .= "<table class=\"collapse\" style=\"width: 100%; border:0;\">\n";
$file_list .= "<thead>\n";
$file_list .= "<tr><th style=\"width: 280px\">Name</th><th>Size</th><th>Last Modified</th></tr>\n";
$file_list .= "</thead>\n";
$file_list .= "<tbody>\n";
foreach ($file_array as $file) {
$file_list .= "<tr>\n";
$file_list .= "<td><li><a href=\"{$file['name']}\" target=\"_blank\">".basename($file['name'])."</a></li></td>\n";
$file_list .= "<td style=\"text-align: right;\">{$file['size']}</td>\n";
$file_list .= "<td style=\"text-align: right;\">".date('d.m.Y H:i:s', $file['lastmod'])."</td>\n";
$file_list .= "</tr>\n";
}
$file_list .= "</tbody>\n";
$file_list .= "</table>\n";
$file_list .= "</div>\n";
return $file_list;
Das Droplet erzeugt eine Auflistung der Dateien aus einem Folder.
Aufgerufen dazu wird mittels:
[[DirList?pfad=Pfad zum Ziel ohne Slash am Schluss]]
Beispiel:
[[DirList?pfad=../../media/share]]
Der Pfad ist vom Standort der Seite zu ermitteln, auf welcher das Droplet eingefügt wurde.
Im Anhang das Droplet.
2Do:
- Auffangen der Variable pfad wenn keiner eingetragen wurde. (Man landet auf dem root vom Server)
Last edited by ecology (22.03.2017 11:11:23)
Offline
florian
Kleine Anmerkung: In der droplets.zip oben sind _alle_ Droplets der Installation. Das ist eher nicht so gut.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Vielen Dank für die Info. Hab's geändert.
Offline
florian
Hm, funktioniert bei mir nicht.
Aufruf mit
[[DirList?pfad=../../media/itemz]]
Da führt aber nur zu
<b>Fatal error</b>: Uncaught UnexpectedValueException: DirectoryIterator::__construct(../../media/itemz/): failed to open dir: No such file or directory in /.../modules/droplets/droplets.php(25) : eval()'d code:10
Stack trace:
#0 /.../modules/droplets/droplets.php(25) : eval()'d code(10): DirectoryIterator->__construct('../../media/ite...')
#1 /.../modules/droplets/droplets.php(25): eval()
#2 /.../modules/droplets/droplets.php(79): do_eval('$file_array = a...', Array, '<!doctype html>...')
#3 /.../modules/droplets/droplets.php(112): processDroplets('<!doctype html>...', 'frontend')
#4 /.../modules/mod_opf_droplets/filter.php(43): evalDroplets('<!doctype html>...')
#5 /.../modules/outputfilter_dashboard/functions.php(1156): opff_mod_opf_droplets('<!doctype html>...', '7', false, false, Object(frontend))
#6 /var/www/web913/html/eso in <b>/.../modules/droplets/droplets.php(25) : eval()'d code</b> on line <b>10</b><br />
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Hy Florian
Dann stimmt dien Pfad nicht. Hab's gerade getestet: wenn ich bei mir nen falschen Pfad angebe bekomme ich selbe Meldung.
Kleine Erklärung zum Pfad: Dieser ist von dem Ort aus zu bezeichnen wo die Seite gespeichert ist. Also bei mir wird das DirList auf dieser Seite eingefügt:
pages/member/upload.php
dann will ich in
media/share
ergibt bei mir -> ../../media/share
Gruss
Raffi
Offline
Ach so, verstehe. Der Fatal Error müsste dann m.E. auch noch irgendwie abgefangen werden.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Ich habe das jetzt gerade mal ausprobiert. Leider ist die Entwicklung dieses an sich nützlichen Droplets ja nicht fortgeführt worden. Zu tun gäbe es noch einiges.
Die Angabe eines falschen Pfades verursacht immer noch einen Fatal Error
dass der Pfad initial von der Position der Seite, auf der das Droplet aufgerufen wird, angegeben werden muss, ist noch nicht optimal in meinen Augen.
Sobald Unterverzeichnisse vorhanden sind, erscheinen deren Namen wie normale Dateien mit in der Liste, wobei dann ein Klick darauf logischerweise nicht die Inhalte anzeigt, sondern direkt das Verzeichnis als Link aufruft, was in 99% der Fälle einen Fehler 403 verursacht
Die Dateien werden unsortiert ausgegeben
Schön wäre eine Rekusion, d.h. dass auch die Inhalte von Unterverzeichnissen ggf. ausgegeben werden können
Meine PHP-Kenntnisse reichen dafür nicht aus, es wäre toll, wenn sich vielleicht gelegentlich jemand findet und das angeht.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Um das Problem mit dem Pfad zu umgehen wäre es ratsam, mit einem Platzhalter zu arbeiten.
Der jetzige Aufruf ist:
[[DirList?pfad=../../media/share]]
macht daraus ein
[[DirList?pfad=WB_PATH/media/share]]
oder sogar ein
[[DirList?pfad=MEDIA/share]]
dann im Droplet Code:
$pfad = str_replace('WB_PATH', WB_PATH, $pfad);
$pfad = str_replace('MEDIA', WB_PATH.'/'.MEDIA_DIRECTORY, $pfad);
und dann den anderen Code.
Das sollte zumindest das Problem mit den nicht vorhandenen Pfaden beheben.
Gruß,
Chris
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline
ich komme da nicht weiter. Bei mir erscheint weder eine Fehlermeldung (wenn ich den falschen Pfad eingebe erscheint eine Fehlermeldung)
noch erhalte ich irgendeine Ausgabe von $file_list.
Wenn ich einen Zähler in die Schleife einbaue z.B. $x = $x + 1 und ausgabe von $file_list auf $x ändere, bekomme ich die Anzahl der Files angezeigt.
Kann mir jemand einen Tipp geben, warum ich keine Ausgabe erhalte
Offline
Falls es nicht als Droplet sein muss: Hier gibt es Dirlist als funktionierendes Modul
https://forum.wbce.org/viewtopic.php?pid=22283#p22283
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Danke, das werde ich dann anstelle dem Droplet verwenden
Offline