WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

Du bist nicht angemeldet.

#1 21.03.2017 10:46:36

ecology
Mitglied

Dirlist

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)

Beitrag geändert von ecology (22.03.2017 11:11:23)

Offline

Liked by:

florian

#2 22.03.2017 07:42:54

florian
Administrator

Re: Dirlist

Kleine Anmerkung: In der droplets.zip oben sind _alle_ Droplets der Installation. Das ist eher nicht so gut.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#3 22.03.2017 09:31:08

ecology
Mitglied

Re: Dirlist

Vielen Dank für die Info. Hab's geändert.

Offline

Liked by:

florian

#4 22.03.2017 10:47:23

florian
Administrator

Re: Dirlist

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-&gt;__construct('../../media/ite...')
#1 /.../modules/droplets/droplets.php(25): eval()
#2 /.../modules/droplets/droplets.php(79): do_eval('$file_array = a...', Array, '&lt;!doctype html&gt;...')
#3 /.../modules/droplets/droplets.php(112): processDroplets('&lt;!doctype html&gt;...', 'frontend')
#4 /.../modules/mod_opf_droplets/filter.php(43): evalDroplets('&lt;!doctype html&gt;...')
#5 /.../modules/outputfilter_dashboard/functions.php(1156): opff_mod_opf_droplets('&lt;!doctype html&gt;...', '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 />


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#5 22.03.2017 11:01:10

ecology
Mitglied

Re: Dirlist

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

#6 22.03.2017 12:09:03

florian
Administrator

Re: Dirlist

Ach so, verstehe. Der Fatal Error müsste dann m.E. auch noch irgendwie abgefangen werden.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#7 17.09.2017 13:16:08

florian
Administrator

Re: Dirlist

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.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#8 17.09.2017 13:24:18

stefanek
Developer

Re: Dirlist

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

#9 15.03.2019 17:18:33

bernhardeis
Mitglied

Re: Dirlist

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

#10 15.03.2019 18:47:07

florian
Administrator

Re: Dirlist

Falls es nicht als Droplet sein muss: Hier gibt es Dirlist als funktionierendes Modul
https://forum.wbce.org/viewtopic.php?pid=22283#p22283


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#11 15.03.2019 19:15:55

bernhardeis
Mitglied

Re: Dirlist

Danke, das werde ich dann anstelle dem Droplet verwenden

Offline

Fußzeile des Forums

up