Downloadliste mit Ordnerunterteilung?

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
lunsen_de
Beiträge: 297
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Downloadliste mit Ordnerunterteilung?

Beitrag von lunsen_de » Mi 21. Mär 2018, 08:26

Hallo, gibt es die Möglichkeit eine Downloadliste zu generieren, die die Ordner bzw. Unterordner mit ausgibt.

Bei 4.8. habe ich immer eine Downloadliste verwendet, die das konnte (flowload 1.0 filelisting).

Wenn ich jetzt einen Ordner aus der Dateiverwaltung in der Downloadliste auswähle und Unterordner mit aktiviere, dann werden alle Dateien untereinander ausgegeben. Man kann nicht erkennen, welche Dateien aus welchen Unterornern sind.

Ich suche eine Möglichkeit Folgendes darzustellen.
z.B.
Im Ordner "Bilder" gibt es 2 Unterordner namens "Bilder1" und "Bilder2" mit jeweils mehreren Bildern (z.B. Bild1_1, Bild1_2..... Bild2_1, Bild2_3....)

Die Downloadliste sollte dann so aussehen

Bilder1
- Bild1_1
- Bild1_2
Bilder2
- Bild2_1
-Bild2_2

Kennt jemand eine Möglichkeit das umzusetzen?

Gruß larslunsen

lunsen_de
Beiträge: 297
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von lunsen_de » Mi 21. Mär 2018, 15:44

Hallo,

unabhängig von einer Lösung für die Frage eben, habe ich jetzt das alte "flowload filelisting" zum laufen gebracht.
tut auch was es soll, allerdings funktioniert die Ausgabe der description nicht mehr, da diese ja jetzt in der Tabelle "upl_meta" steht.
Also habe ich aus

Code: Alles auswählen

....
$cat_id=1; 
while($db->nextRecord()) { 
$sql = "SELECT idupl, filename, dirname, filetype, size, description FROM ".$cfg['tab']['upl']." WHERE dirname = '".$db->f('dirname')."' ORDER BY filename ASC"; 
$db_folder->query($sql); 
    
$sql = "SELECT lastmodified FROM ".$cfg['tab']['upl']." WHERE dirname = '".$db->f('dirname')."' ORDER BY lastmodified DESC LIMIT 1"; 
$db_lastmodified->query($sql); 
....
Folgendes gemacht, damit das Modul funktioniert:

Code: Alles auswählen

....
$cat_id=1; 
while($db->nextRecord()) { 
$sql = "SELECT idupl, filename, dirname, filetype, size FROM ".$cfg['tab']['upl']." WHERE dirname = '".$db->f('dirname')."' ORDER BY filename ASC"; 
$db_folder->query($sql); 
    
$sql = "SELECT lastmodified FROM ".$cfg['tab']['upl']." WHERE dirname = '".$db->f('dirname')."' ORDER BY lastmodified DESC LIMIT 1"; 
$db_lastmodified->query($sql); 
....
Was muss ich an dieser Stelle wieder einfügen, damit die description aus der anderen Datenbanktabelle gelesen wird?

Weiter unten kommt dann

Code: Alles auswählen

....
 while($db_folder->nextRecord()) { 
        $idupl = $db_folder->f('idupl'); 
        $filename = $db_folder->f('filename'); 
        $dirname = $db_folder->f('dirname'); 
        $filetype = $db_folder->f('filetype'); 
        $size_ = $db_folder->f('size'); 
        $size = round($size_/1000, 2); 
	$description = $db_folder->f('description'); 
	$description = urldecode($description); 
....
Gruß larslunsen

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von Faar » Mi 21. Mär 2018, 16:52

Irgendwas mit der idupl aus der letzten Datenbankabfrage so inner weiteren SQL verwenden:

Code: Alles auswählen

$sql = "SELECT * FROM ".$cfg['tab']['upl_meta']." WHERE dirname = $idupl";
Und dann alle diese Werte auslesen, je nachdem was es braucht:
https://docs.contenido.org/display/COND ... e+upl_meta
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von Oldperl » Mi 21. Mär 2018, 18:18

Servus,

vielleicht einfach mal das Auslesen mit den API-Klassen machen, so seit ihr unabhängiger vom genutzten DB-Treiber.
:arrow: https://api.contenido.org/con4911/class ... dMeta.html

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

lunsen_de
Beiträge: 297
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von lunsen_de » Mi 21. Mär 2018, 19:01

Hallo, ich hoffe Ihr könnt noch einmal helfen, denn etwas zu früh gefreut:

Das Modul flowload filelist erstellt jetzt auch als einen Punkt/Abschnitt in der Liste, der nicht Dateien sondern die Ordner als verlinktes downloadelement auflistet.
Konstellation:
Ordner "download"
Unterordner "download1" und "download2" darin jeweils 2 Bilder

Richtig wäre
download > download1
- Bild1 20kb
- Bild2 21kb
download > download2
- Bild3 15kb
- Bild4 10kb

Leider steht jetzt vor den richtigen Einträgen:
download
- download1 4.1kb
- download2 4.1kb

Die sind aber nur die Ordner und sollen nicht auftauchen, sie sind mit der Dateigröße 4.1kb angegeben, so wie in der Datenbank (Tabelle con_upl).
Warum wurden früher nur Dateien ausgegeben und jetzt plötzlich auch Ordner (die eh nicht herunterladbar sind).

Anbei de Modulcode (Ausgabe):

Code: Alles auswählen

<?php 
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     flowload 1.0 filelisting 
* Author(s)   :     flow, jessix[at]gmx.net 
* Created     :     16.12.2007 
* 
************************************************/ 
$tpl->assign('s', 'DESCRIPTION', mi18n("DESCRIPTION"));
$tpl->assign('s', 'DATEINAME', mi18n("DATEINAME"));
$tpl->assign('s', 'GROESSE', mi18n("GROESSE"));
$tpl->assign('s', 'COUNTER', mi18n("COUNTER"));
$tpl->assign('s', 'DOKUMENTE', mi18n("DOKUMENTE"));
$tpl->assign('s', 'Anzeigen', mi18n("Anzeigen"));
$tpl->assign('s', 'Verbergen', mi18n("Verbergen"));
$tpl->assign('s', 'Update', mi18n("Update"));

echo(" 
    <script language=\"JavaScript\" type=\"text/javascript\"> 
        function ShowHide(id) { 
            obj = document.getElementsByTagName(\"div\"); 
            if (obj[id].style.display == 'block'){ 
                obj[id].style.display = 'none'; 
            } 
            else { 
                obj[id].style.display = 'block'; 
            } 
        } 
    </script> 
"); 

$fileicon  = array( 
                 '*'    => 'images/icons/file.gif',
                 'joboptions'  => 'images/icons/txtfile.gif', 
                 'bz2'  => 'images/icons/rarfile.gif', 
                 'c'    => 'images/icons/cfile.gif', 
                 'cpp'  => 'images/icons/cppfile.gif', 
                 'doc'  => 'images/icons/docfile.gif', 
                 'exe'  => 'images/icons/exefile.gif', 
                 'h'    => 'images/icons/hfile.gif', 
                 'htm'  => 'images/icons/htmfile.gif', 
                 'html' => 'images/icons/htmfile.gif', 
                 'gif'  => 'images/icons/imgfile.gif', 
                 'gz'   => 'images/icons/zipfile.gif', 
                 'jpg'  => 'images/icons/imgfile.gif', 
                 'js'   => 'images/icons/jsfile.gif', 
                 'm'    => 'images/icons/mfile.gif', 
                 'mp3'  => 'images/icons/mpgfile.gif', 
                 'mpg'  => 'images/icons/mpgfile.gif', 
                 'pdf'  => 'images/icons/pdffile.gif', 
                 'png'  => 'images/icons/imgfile.gif', 
                 'ppt'  => 'images/icons/pptfile.gif', 
                 'rar'  => 'images/icons/rarfile.gif', 
                 'swf'  => 'images/icons/swffile.gif', 
                 'txt'  => 'images/icons/txtfile.gif', 
                 'xls'  => 'images/icons/xlsfile.gif', 
                 'zip'  => 'images/icons/zipfile.gif', 
                 ); 

if(!is_object($db_folder)) $db_folder = new cDb; 
if(!is_object($db_lastmodified)) $db_lastmodified = new cDb; 

$dirname = "CMS_VALUE[1]"; 
$trimfolder = "CMS_VALUE[2]"; 
if($trimfolder == "") $trimfolder = 0; 

// Db qry 
$sql = "SELECT DISTINCT dirname FROM ".$cfg['tab']['upl']." WHERE dirname LIKE '$dirname%' ORDER BY dirname";    
$db->query($sql); 

$cat_id=1; 
while($db->nextRecord()) { 
	$sql = "SELECT idupl, filename, dirname, filetype, size FROM ".$cfg['tab']['upl']." WHERE dirname = '".$db->f('dirname')."' ORDER BY filename ASC";
    $db_folder->query($sql); 
    
    $sql = "SELECT lastmodified FROM ".$cfg['tab']['upl']." WHERE dirname = '".$db->f('dirname')."' ORDER BY lastmodified DESC LIMIT 1"; 
    $db_lastmodified->query($sql); 
    $lastmodified = $db_lastmodified->nextRecord(); 
    $lastmodified = $db_lastmodified->f('lastmodified'); 
    $db_lastmodified->free(); 

    $exploded_dir = explode("/", $db->f('dirname')); 
    $print_dir = ""; 
    for($i=$trimfolder; $i<(count($exploded_dir)-1); $i++) { 
        $print_dir .= $exploded_dir[$i]." » "; 
    } 
    $print_dir = substr($print_dir, 0, -6); 
    $print_dir .= "<span class='klavika_light fs17 white up fright'> ".$db_folder->numRows()." ".mi18n('DOKUMENTE')."</span>"; 

	echo(" <div id='downloadschmal' style='color:#fff'>
        <div class='dl_h6'>".$print_dir."</div> 
        <div class='lastmodified'> ".mi18n('Update').": ".$lastmodified."<!--<a style'padding-left:20px;' href=\"javascript:ShowHide('cat_".$cat_id."');ShowHide('cat_show_".$cat_id."');ShowHide('cat_hide_".$cat_id."')\"></a>--></div> 
        <div id='cat_show_".$cat_id."' style='margin-bottom:20px; padding-top:0px; width:100px; display: block'><a class='dl_anzeigen' href=\"javascript:ShowHide('cat_".$cat_id."');ShowHide('cat_show_".$cat_id."');ShowHide('cat_hide_".$cat_id."')\">".mi18n('Anzeigen')."</a></div> 
           <div id='cat_hide_".$cat_id."' style='margin-bottom:10px; padding-top:0px; width:100px; display: none'><a class='dl_verbergen' href=\"javascript:ShowHide('cat_".$cat_id."');ShowHide('cat_show_".$cat_id."');ShowHide('cat_hide_".$cat_id."')\">".mi18n('Verbergen')."</a></div>
        <div id='cat_".$cat_id."' style=\"display: none;\"'> 
        <table style='width: 100%' class='dl_tbl' cellspacing='0' cellpadding='0'> 
            <tr  style=''> 
                <td style='width: 20px' class='dl_head'> </td> 
                <td style='width: 280px' class='dl_head'>".mi18n('DATEINAME')."</td> 
                <td style='width: 60px' class='dl_head'>".mi18n('GROESSE')."</td> 
                  <td style='width: 60px' class='dl_head'>".mi18n('DESCRIPTION')."</td>
            </tr> 
    "); 
    $cat_id++; 
	
    while($db_folder->nextRecord()) { 
        $idupl = $db_folder->f('idupl'); 
        $filename = $db_folder->f('filename'); 
        $dirname = $db_folder->f('dirname'); 
        $filetype = $db_folder->f('filetype'); 
        $size_ = $db_folder->f('size'); 
        $size = round($size_/1000, 2); 
	$description = $db_folder->f('description'); 
	$description = urldecode($description); 

        if ($size >= 1000) { 
            $size = round($size/1000, 2); 
            $printsize = $size.' MB'; 
        } else { 
            $printsize = $size.' KB'; 
        } 

        echo(" 
            <tr> 
                <td  style='width: 20px' class='filelisting_kurz'><img src='".$fileicon[strtolower($filetype)]."'/></td> 
                <td class='filelisting_kurz'>".$description."<br><a href='front_content.php?idart=476&idcat=2&fid=".$idupl."' target='_blank'>".$filename."</a></td> 
                <td class='filelisting_kurz'>".$printsize."</td> 
                <td>".$description."</td>
            </tr> 
        "); 
    } 
    echo("</table></div></div>"); 
    $db_folder->free(); 
} 
$db->free(); 
?>
Sieht einer den Fehler?

Gruß larslunsen

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von homtata » Do 22. Mär 2018, 08:12

Schau dir - im Prinzip wie von Oldperl vorgeschlagen - mal lieber bestehende 4.9er-Downloadmodule an (meins z.B. viewtopic.php?f=89&t=34061), und dann siehst du, die die bestehenden API-Klassen für alles viel geschickter und mit weniger Code eingesetzt werden, um erstmal die Listen samt Metatags zusammenzubasteln in ein Array.
Dann kannst du die Ausgaben entweder noch sortieren (nach Ordner) oder nochmal anders bearbeiten, bevor du sie dann in Smarty ausgibst (wenn nicht sogar dort geschickt sortierst und zerhackstückst).

lunsen_de
Beiträge: 297
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von lunsen_de » Do 22. Mär 2018, 09:40

Hallo, danke für die Anregungen, aber ich muss jetzt mal etwas loswerden.

Ich bin kein Programmierer, war ich nicht und werde ich sicher auch nicht mehr. Ich kann ein bisschen basteln und kleinere Anpassungen an Modulen machen. Aber keine Eigenen erstellen. Ich schaue bei Fragen und Problemen immer erst ins Forum, ob es da etwas gibt oder jemand helfen kann.

Früher kamen im Forum auf Posts von Modulen oder Codes Antworten wie: .... erstze mal in Zeile sowieso dies durch jenes, wenn das nicht funktioniert probiere das.... oder ich hätte da......

Jetzt kommt häufig ein Tipp, ein Link zur Api oder Ähnlichem und der Wink baue selbst.
Muss ich sagen: bekomme ich nicht hin. Also wird es wohl beim Standardmodul bleiben müssen. Leider.

Aber danke für dein Modul, habe es auich schon im Einsatz, allerdings ist es halt auch ohne Ordnerstrukturierung (wie alle in 4.9) und die Funktion auch Unterordner auszugeben, wählt man eine Ordner der nur Unterordner hat und keine Dateien, gibt die Liste die Unterordnernamen als Link aus und die führen bei Klick ins forbidden (Bilder/Inhalt der Unterordner werden garnicht angezeigt).
Im Prinzip macht dein Modul den selben Fehler, wie das alte flowload Modul und listet auch Ordner wenn Sie unterordner des gewählten Ordners sind mit auf.
Vielleicht ist meine Frage ja eine Anregung zur Erweiterung deines Moduls.

Grüße larslunsen

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von Faar » Do 22. Mär 2018, 10:07

lunsen_de hat geschrieben:
Do 22. Mär 2018, 09:40
Hallo, danke für die Anregungen, aber ich muss jetzt mal etwas loswerden.
:shock:
Aber keine Eigenen erstellen.
:(
Früher kamen im Forum auf Posts von Modulen oder Codes Antworten wie: .... erstze mal in Zeile sowieso dies durch jenes, wenn das nicht funktioniert probiere das.... oder ich hätte da......
Früher war es auch irgendwie einfacher, aber es wird immer komplizierter und schnelle Lösungen gibt es immer seltener.
War früher oft noch Spaghetticode vorhanden, den man nur von Zeile 1 bis Ende verflogen musste und alles in einer Datei oder Seite war, ist heute alles abstrakt verschachtelt und man muss viel Dokumentation und peripheren Code lesen, um zu verstehen was wenige Zeilen Modul-Code machen.
Der Aufwand ist dadurch deutlich größer geworden, schnell mal ist oft nicht mehr, man muss sich in das Problem einarbeiten.
Das kostet aber richtig Zeit und somit auch Geld, das man anderswo nicht verdient.
Muss ich sagen: bekomme ich nicht hin. Also wird es wohl beim Standardmodul bleiben müssen. Leider.
Wir verdienen Geld damit, dass wir z.B. auch Module programmieren können, oder alte anpassen.
Das ist manchmal recht hartes Brot.
Nun hergehen und für andere die Probleme zu lösen, die viel weiter gehen als nur ein paar Tipps, das können wir nicht.
Weil wir nicht davon leben können.
Vielleicht ist meine Frage ja eine Anregung zur Erweiterung deines Moduls.
Wenn er Zeit hat, die er sonst völlig ungenutzt verstreichen lassen müsste, macht er das sicher auch.
Aber halt nicht jetzt und gleich, sondern irgendwann mal.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

lunsen_de
Beiträge: 297
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von lunsen_de » Fr 23. Mär 2018, 08:15

Hallo, danke für die Antwort. Kann ich größtenteils nachvollziehen.

Dann noch einmal einfach die Frage: Hat jemand eine Idee, was man in dem alten Modul (flowload) ändern müsste, damit die Ordner nicht aufgelistet werden?

Ansonsten die Frage an die Programmierer unter euch, was es kosten würde, entweder das Standardmoul (download_list) oder das von homtata um die Funktion zu erweitern, Unterordner mit auszulesen UND mit auszugeben, wie ich das oben beschrieben habe (also eigentlich das alte flownload Modul in NEU).
Die Downloadliste sollte dann so aussehen

Bilder1
- Bild1_1
- Bild1_2
Bilder2
- Bild2_1
-Bild2_2
Grüße larslunsen

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von bodil » Fr 23. Mär 2018, 11:21

Ich kenne das Modul flowload nicht, daher ein Schuss ins Blaue: Vielleicht kannst du die Ordner mit CSS unsichtbar machen? Falls du das nicht hinbekommst, schreib mir, wo ich mir das (online) anschauen kann, dann kann ich dir da vielleicht helfen.
Gruß!
Bodil

lunsen_de
Beiträge: 297
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Re: Downloadliste mit Ordnerunterteilung?

Beitrag von lunsen_de » Fr 23. Mär 2018, 11:47

Hallo, die Idee hatten wir auch schon. funktioniert aber nur auf der obersten Ebene, also beim 1. Eintrag (wenn es eine downloadordner mit Unterordnern gibt). Wenn ein Redakteur dann aber auf die Idee kommt in einem Unterorder noch einen anzulegen (also noch eine Ebene tiefer) dann taucht in der Liste wieder ein Abschnitt auf der eine Ordnernamen enthält und - Klick - forbidden. Also nicht die Ideallösung.

Gruß larslunsen

Antworten