Download Modul: flowload 1.0 (Downloads in Kategorien)

flow
Beiträge: 10
Registriert: Di 13. Nov 2007, 18:02
Kontaktdaten:

Download Modul: flowload 1.0 (Downloads in Kategorien)

Beitrag von flow » So 16. Dez 2007, 20:12

Wichtig: lars.v hat das Modul auf Templates umgestellt. Beitrag weiter unten - oder hier.

Habe mich dazu entschlossen ein Downloadmodul zu schreiben, da ich bisher keines mit meinen Anforderungen gefunden habe. Da ich in Sachen Contenido noch relativ grün hinter den Ohren bin, habe ich mir das Modul Download All 1.1 von Marcel Bensch angeschaut und im Prinzip jenes umgebaut (und auch seine Icons übernommen). Mein Modul funktioniert, aber wie gesagt: Bin Contenido Neuling und wenn's grundsätzliches zu verbessern gibt, bin ich für Tipps dankbar.


Die wesentlichen Unterschiede in meinem Modul:
  • Die Downloads werden in Kategorien zusammengefasst, wobei jeder Ordner einer Kategorie entspricht und der Ordnername jeweils dem Namen der Kategorie
  • Die Downloads werden gezählt, wobei da 'leider' die Tabelle con_upl um eine Spalte erweitert werden muss
  • Man kann den Ordner auswählen, in dem alle files mitsamt Unterordnern gelistet werden sollen. Neu dabei ist, dass man jeden Ordner auswählen kann und nicht nur jene, die files enthalten.
Anzusehen hier:
http://et-fulda.flowtec.net/front_content.php?idcat=85

Über ein kleines Javascript können hier noch die Kategorien auf- und zugeklappt werden. Das ist auch im Modul hier derzeit so eingebaut, aber ist nur ein optisches Spielchen und hat nichts mit dem Modul ansich zu tun.

Benötigt wird:
  • DB Query um Spalte für Downloads hinzuzufügen
  • Modul für Download-Listing
  • Modul für Download-Zähler und Weiterleitung zum file
  • Leeres Template für den Counter/Redirecter
  • Template für das file-listing
  • optional: CSS Styles zum leichteren anpassen
  • Icons, müssen in "images/": http://stuff.flowtec.net/dl/contenido/icons.rar

Tutorial zum Installieren, benötigte Codes weiter unten:

- DB Query absetzen, Leer-Layout erstellen.
- Die beiden Module "flowload 1.0 filelsting" und "flowload 1.0 counter/redirecter" erstellen.
- Template "flowload 1.0 counter/redirecter" erstellen, welches das eben erstellte Leer-Layout benutzt. In den Container das Modul "flowload 1.0 counter/redirecter" setzen.
- Template "flowload 1.0 filelisting" erstellen und in den gewünschten Container "flowload 1.0 filelsting" setzen.
- In einer Kategorie (z.B. direkt in den Downloads) einen Artikel "flowload 1.0 counter/redirecter" erstellen, Template "flowload 1.0 counter/redirecter" zuweisen (online, kein Startartikel). Den Artikel-Link anzeigen lassen und in die Zwischenablage kopieren (oder sonstwie zwischenspeichern).
- Das Modul "flowload 1.0 filelisting" nochmal öffnen und in Zeile 120 (fast am Ende) die Parameter im Link zu front_content.php... anpassen (also idart und idcat). Die eben zwischengespeicherten idart und icat müssen da natürlich rein.
- Zum Schluss noch einer Kategorie oder einem Artikel das Template "flowload 1.0 filelisting" zuweisen und ggf. CSS Styles in die style.css einfügen. Die 2 Moduloptionen da vornehmen und fertig.


Benötigte Codes:

Folgende DB Query muss in der Datenbank abgesetzt werden (z.B. mit phpMyAdmin):

Code: Alles auswählen

ALTER TABLE `con_upl` ADD `dl_count` INT NOT NULL DEFAULT '0' AFTER `size`;
"Leeres Layout" für den Counter/Redirecter. Vor dem Container darf keine Ausgabe erfolgen, da sonst header:(Location..) nicht funktioniert.

Code: Alles auswählen

<container id="25" name="Text" types="Content" default="">Content 2</container>
Modul "flowload 1.0 filelisting INPUT":

Code: Alles auswählen

?><?php
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname:    flowload 1.0 filelisting
* Author(s):    flow, jessix[at]gmx.net
* Created :     16.12.2007
*
************************************************/

#Selected Download directory
$cms_dirname = "CMS_VALUE[1]";
$trimfolder = "CMS_VALUE[2]";

if ($cms_dirname == '' || $cms_dirname == '0') {
   $cms_dirname = '--- Bitte w&auml;hlen ---';
}

#Get paths
$sql = "SELECT
   htmlpath, frontendpath
   FROM
   ".$cfg["tab"]["clients"]."
   WHERE
   idclient = ".$client." ";
$db->query($sql);

if ($db->next_record()) {
   $htmlpath = $db->f('htmlpath');
   $frontendpath = $db->f('frontendpath');
}

#Choose image folder
echo ("
    <table cellpadding='0' cellspacing='0' border='0'>
    <tr><td class='text_medium' style='padding:5px;'>Wieviel Ordner sollen bei der Kategoriebezeichnung vorne<br /> abgeschnitten werden? Nur optische Auswirkungen und<br /> durch eine \"2\" wird z.B. aus<br /><i>files/downloads/dokumente/lebenslauf</i> -> <br /><i>dokumente/lebenslauf</i></td>
    </tr><tr>
    <td class='text_medium' style='padding:5px;'><input type='text' name='CMS_VAR[2]' style='width: 25px' value='$trimfolder' /></td>
    <tr><td class='text_medium' style='padding:5px;'>Dateien unterhalb Verzeichnis anzeigen:</td>
    <tr><td class='text_medium' style='padding:5px'>
    <select name='CMS_VAR[1]' style='width:200px'>'
    ");

#Get upload directories
$sql = "SELECT DISTINCT
   dirname
   FROM
   ".$cfg["tab"]["upl"]."
   WHERE
   idclient='$client'
   ORDER BY
   dirname";

$db->query($sql);

$dirlist = array();

while($db->next_record()) {
    $exploded = explode("/", $db->f('dirname'));
    $expl_cnt = count($exploded);
    $builddir = "";
    for($i=0; $i<$expl_cnt-1; $i++) {
        $builddir .= $exploded[$i]."/";
        if(!in_array($builddir, $dirlist)) array_push($dirlist, $builddir);
    }
}        

foreach($dirlist AS $dir) {
    if($cms_dirname != $dir) {
        echo '<option value="'.$dir.'">&nbsp;'.$dir.'</option>';
    } else {
        echo '<option value="'.$dir.'" selected="selected">&nbsp;'.$dir.'</option>';
    }
}

echo "</select>&nbsp";
echo "</td></tr>";
echo "</table>";
?><?php 
Modul "flowload 1.0 filelisting OUTPUT":

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     flowload 1.0 filelisting
* Author(s)   :     flow, jessix[at]gmx.net
* Created     :     16.12.2007
*
************************************************/

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',
                 '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 DB_Contenido;
if(!is_object($db_lastmodified)) $db_lastmodified = new DB_Contenido;

$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->next_record()) {

    $sql = "SELECT idupl, filename, dirname, filetype, size, dl_count, description FROM ".$cfg['tab']['upl']." WHERE dirname = '".$db->f('dirname')."' ORDER BY idupl DESC";
    $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->next_record();
    $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]."&nbsp;&raquo;&nbsp;";
    }
    $print_dir = substr($print_dir, 0, -19);
    $print_dir .= " (".$db_folder->num_rows()." files)";

    echo("
        <h4>".$print_dir."</h4>
        <p class='lastmodified'>Letztes Update: ".$lastmodified."</p>
        <div id='cat_show_".$cat_id."' style='display: block'><a class='dl_anzeigen' href=\"javascript:ShowHide('cat_".$cat_id."');ShowHide('cat_show_".$cat_id."');ShowHide('cat_hide_".$cat_id."')\">Anzeigen</a></div>
        <div id='cat_hide_".$cat_id."' style='display: none'><a class='dl_verbergen' href=\"javascript:ShowHide('cat_".$cat_id."');ShowHide('cat_show_".$cat_id."');ShowHide('cat_hide_".$cat_id."')\">Verbergen</a></div>
        <div id='cat_".$cat_id."' style=\"display: none;\"'>
        <table style='width: 100%' class='dl_tbl'>
            <tr>
                <td style='width: 20px' class='dl_head'>&nbsp;</td>
                <td style='width: 280px' class='dl_head'>filename</td>
                <td style='width: 60px' class='dl_head'>size</td>
                <td style='width: px' class='dl_head'>description</td>
                <td style='width: 60px' class='dl_head'>DL counter</td>
            </tr>
    ");
    $cat_id++;

    while($db_folder->next_record()) {
        $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);
        $dl_count = $db_folder->f('dl_count');
        $description = $db_folder->f('description');
        $description = urldecode($description);

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

        echo("
            <tr>
                <td><img src='".$fileicon[strtolower($filetype)]."'/></td>
                <td><a href='front_content.php?idart=153&idcat=85&fid=".$idupl."' target='_blank'>".$filename."</a></td>
                <td>".$printsize."</td>
                <td>".$description."</td>
                <td>".$dl_count."</td>
            </tr>
        ");
    }
    echo("</table></div>");
    $db_folder->free();
}
$db->free();
?>

Modul "flowload 1.0 counter/redirecter"

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     flowload 1.0 counter / redirecter
* Author(s)   :     flow, jessix[at]gmx.net
* Created     :     16.12.2007
*
************************************************/

if(!isset($_GET['fid'])) exit;

// Db qry
$sql = "SELECT dirname, filename, dl_count FROM ".$cfg['tab']['upl']." WHERE idupl = '".trim($_GET['fid'])."'";
$db->query($sql);
$db->next_record();
$count = ($db->f('dl_count'))+1;
$dirname = $db->f('dirname');
$filename = $db->f('filename');

//if(!$db->f('filename')) exit;

$sql = "UPDATE ".$cfg['tab']['upl']." SET dl_count = '".$count."' WHERE idupl ='".$_GET['fid']."' LIMIT 1";
$db->query($sql);

$db->free();
header("Location: upload/".$dirname.$filename);

?>

Im Beispiel verwendete CSS Styles:

Code: Alles auswählen

h4 {
    font-size: 14px;
    color: black;
    padding: 3px;
    border-bottom: 3px solid #94cd5e;
    background-color: #96a4bf;
    margin: 18px 0px 2px 0px;
}
.dl_tbl {
    margin-bottom: 20px;
}
.dl_head {
    padding: 1px;
    color: black;
    background-color: #94cd5e;
}
.dl_anzeigen {
    background: #fff url(../images/dl_plus.gif) no-repeat left center;
    padding-left: 20px;
    margin-left: 4px;
}
.dl_verbergen {
    background: #fff url(../images/dl_minus.gif) no-repeat left center;
    padding-left: 20px;
    margin-left: 4px;
}
.lastmodified {
    margin: -22px 5px 10px 0px;
    text-align: right;
    font-size: 10px;
}
Zuletzt geändert von flow am Mi 2. Apr 2008, 14:10, insgesamt 2-mal geändert.

delinquent
Beiträge: 184
Registriert: Fr 17. Aug 2007, 12:15
Kontaktdaten:

Beitrag von delinquent » So 16. Dez 2007, 21:12

Du könntest beispielsweise den HTML Output in Modul-Templates auslagern und diese via Template-Klasse ansprechen. Beispiel:

Code: Alles auswählen

$tpl->set('d', 'NAME', $name);
$tpl->generate("templates/flowload.html");
Das gibt eine gewisse Flexibilität beim Design.

Ausserdem könntest Du Dich der Contenido-Properties bedienen und müsstest somit keine weitere Spalte in der Tabelle einfügen. Diese Änderung übersteht nämlich kein Update. Dazu kannst Du Dir (siehe class.upl.php) entsprechende Objekte für jede Datei erzeugen und dann via

Code: Alles auswählen

$count = $objDownload->getProperty("flowload", "dl_count");
den Zähler auslesen und via

Code: Alles auswählen

$objDOwnload->setProperty("flowload", "dl_count", $count);
setzen.

Schau Dir mal im Backend die Klassen im Ordner classes/ an. Die sind eine gute Anlaufstelle.


Gruß,
Manuel

wosch

Beitrag von wosch » So 16. Dez 2007, 22:18

Aha, schön.
So wie @delinquent sagt, die zusätzliche Tabelle ist unschön.
Der Redirect ist ggf. aber wieder schön.

Wenn du als Muster die Template-Version von mir aus dem Tread von @wayfearer (=Marcel Bensch) genommen hättest, brauchte ich nicht wieder eine Version zur Template-Version umbauen :lol:
Ist aber hier kein Problem, und bei der Gelegenheit, falls es meine Zeit zuläßt, kommt der Counter raus, entfällt die zusätzliche Tabelle, und dann paßt es schon wie ich es mir vorstellen könnte.

Alles in allem, ein schönes Modul. Vielseitig einsetzbar.

flow
Beiträge: 10
Registriert: Di 13. Nov 2007, 18:02
Kontaktdaten:

Beitrag von flow » So 16. Dez 2007, 23:05

Danke für eure Tipps, werde die nächsten Tage das dann nochmal ordentlich machen. :)

Mc
Beiträge: 188
Registriert: Mi 2. Mär 2005, 21:19
Kontaktdaten:

Beitrag von Mc » Fr 28. Dez 2007, 17:06

Hallo flow,

schaut super aus und ist genau das, was ich suche. Ich habe alles installiert. Bei der Konfiguration werden allerdings keine Verzeichnisse zur Auswahl angezeigt.

Hat sich erledigt. Musste erst die einzelnen Ordner in der Dateiverwaltung anklicken.
Funktioniert bestens. Vielen Dank.

Grüße
Mc

borcherta
Beiträge: 36
Registriert: Sa 1. Dez 2007, 11:06
Kontaktdaten:

Beitrag von borcherta » Di 1. Jan 2008, 19:44

Super Modul.

Wenn die Downloads aber im geschützten Bereich nur abrufbar sind, wie kann ich das machen??
Die Verzeichnisse haben doch alle die Berechtigungen 775 ???
Somit kann ich ohne Login an die Files ran.

Jemand eine Idee?

tinof
Beiträge: 197
Registriert: Mi 24. Jan 2007, 20:38
Wohnort: Kirchberg / Sa.
Kontaktdaten:

Beitrag von tinof » Mi 2. Jan 2008, 07:40

borcherta hat geschrieben:Super Modul.
Finde ich auch !!!
borcherta hat geschrieben: Jemand eine Idee?
Ja, hier habe ich sowas mal gemacht, müßte sinngemäß übernommen werden.
Für die Freizeit : www.hobbybrauer.de

flow
Beiträge: 10
Registriert: Di 13. Nov 2007, 18:02
Kontaktdaten:

Beitrag von flow » Sa 12. Jan 2008, 01:38

Sorry für die späte Antwort, hänge grad in den Prüfungen der Hochschule ...

Ich werde bald nochmal eine ordentliche Version mit Templates zusammenbauen, und dann auch den Umstand mit der Datenbank angehen.

Dass deine Ordner erst nicht angezeigt wurden lag daran, dass du sie sicher per FTP hochgeladen hast. Damit umgehst du Contenido, welches das erst checkt und sie in der Datenbank speichert, wenn du die Ordner in der Dateiverwaltung einmal anklickst. Nur zur Erkärung, da du es ja gemacht hast. :)

dormor
Beiträge: 10
Registriert: Mi 22. Aug 2007, 10:01
Kontaktdaten:

Beitrag von dormor » Fr 15. Feb 2008, 10:21

Hallo flow,

stellste die Template-Version noch zusammen?

Wäre super.

Danke und Gruß,
d.

winston
Beiträge: 35
Registriert: Di 30. Okt 2007, 12:20
Kontaktdaten:

fehler

Beitrag von winston » Mo 24. Mär 2008, 14:16

Code: Alles auswählen

Warning: Cannot modify header information - headers already sent by (output started at ...cms/front_content.php(884) : eval()'d code:10) in ...cms/front_content.php(884) : eval()'d code on line 37
habe alles nach anleitung gemacht aber bekomme diesen fehler :(
kann mir jemand helfen? wäre super

habe eigentlich für den redirecter ein leer layout erstellt wo nur der container 25 drin ist :/

pit
Beiträge: 96
Registriert: Mo 14. Apr 2003, 10:28
Wohnort: Rotenhain
Kontaktdaten:

Beitrag von pit » Di 25. Mär 2008, 11:12

überprüf mal das leer-Layout, da darf meines Wissens noch nicht mal ein leerzeichen drinne sein...
Die alten Zeilen wurden schlecht und man begann sie wegzuschmeissen, die neuen kamen grade recht um sich an ihnen zu verbeissen! (frei nach Heinz Erhardt)

winston
Beiträge: 35
Registriert: Di 30. Okt 2007, 12:20
Kontaktdaten:

Beitrag von winston » Di 25. Mär 2008, 18:00

ahhhh, hab body und head tag rausgenommen und nur den container stehen lassen! nun funktionierts! danke :)

habe nun aber leider ein weiteres problem, bei mp3's wird die mp3 wiedergegeben und kein download gestartet.
wie kann ich das umgehen? außer, indem ich zip files benutze?

Freddy
Beiträge: 252
Registriert: Fr 6. Mai 2005, 21:01
Wohnort: Gummersbach
Kontaktdaten:

Beitrag von Freddy » Fr 28. Mär 2008, 01:19

Hallo,
super Modul. Leider funktioniert es bei mir nicht ganz. Habe es auf einer geschützen Seite angelegt. Und benutze 4.6.23mr.
Funktioniert das Modul nicht auf geschützten Seiten von Contenido oder hat es was mit modrewrite zu tun? Beim Anklicken zum download wird ein neues Fenster mit Errorseite geöffnet. Im Backend funktioniert es komischerweise.

winston
Beiträge: 35
Registriert: Di 30. Okt 2007, 12:20
Kontaktdaten:

Beitrag von winston » Sa 29. Mär 2008, 21:58

habe mein problem in den griff bekommen.
falls jemand interessiert ist einen downloaddialog zu erzwingen (z.B. bei mp3 oder txt dateien):
http://contenido.de/forum/viewtopic.php?t=20852

lars.v
Beiträge: 5
Registriert: Fr 22. Jul 2005, 09:16
Wohnort: Oldenburg
Kontaktdaten:

Beitrag von lars.v » Mi 2. Apr 2008, 11:13

Habe das Modul auf Templates umgestellt, sowie den Download-Count wegen der Upgradeunfähigkeit heraus genommen.

mit Redirect-Container und Icons wie oben im ersten Artikel verfahren.


Modul "flowload 1.0 filelisting INPUT":

Code: Alles auswählen

?><?php
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname:    flowload 1.0 filelisting
* Author(s):    flow, jessix[at]gmx.net
* Created :     16.12.2007
*
************************************************/

#Selected Download directory
$cms_dirname = "CMS_VALUE[1]";
$trimfolder = "CMS_VALUE[2]";

if ($cms_dirname == '' || $cms_dirname == '0') {
   $cms_dirname = '--- Bitte w&auml;hlen ---';
}

#Get paths
$sql = "SELECT
   htmlpath, frontendpath
   FROM
   ".$cfg["tab"]["clients"]."
   WHERE
   idclient = ".$client." ";
$db->query($sql);

if ($db->next_record()) {
   $htmlpath = $db->f('htmlpath');
   $frontendpath = $db->f('frontendpath');
}

#Choose image folder
echo ("
    <table cellpadding='0' cellspacing='0' border='0'>
    <tr><td class='text_medium' style='padding:5px;'>Wieviel Ordner sollen bei der Kategoriebezeichnung vorne<br /> abgeschnitten werden? Nur optische Auswirkungen und<br /> durch eine \"2\" wird z.B. aus<br /><i>files/downloads/dokumente/lebenslauf</i> -> <br /><i>dokumente/lebenslauf</i></td>
    </tr><tr>
    <td class='text_medium' style='padding:5px;'><input type='text' name='CMS_VAR[2]' style='width: 25px' value='$trimfolder' /></td>
    <tr><td class='text_medium' style='padding:5px;'>Dateien unterhalb Verzeichnis anzeigen:</td>
    <tr><td class='text_medium' style='padding:5px'>
    <select name='CMS_VAR[1]' style='width:200px'>'
    ");

#Get upload directories
$sql = "SELECT DISTINCT
   dirname
   FROM
   ".$cfg["tab"]["upl"]."
   WHERE
   idclient='$client'
   ORDER BY
   dirname";

$db->query($sql);

$dirlist = array();

while($db->next_record()) {
    $exploded = explode("/", $db->f('dirname'));
    $expl_cnt = count($exploded);
    $builddir = "";
    for($i=0; $i<$expl_cnt-1; $i++) {
        $builddir .= $exploded[$i]."/";
        if(!in_array($builddir, $dirlist)) array_push($dirlist, $builddir);
    }
}       

foreach($dirlist AS $dir) {
    if($cms_dirname != $dir) {
        echo '<option value="'.$dir.'">&nbsp;'.$dir.'</option>';
    } else {
        echo '<option value="'.$dir.'" selected="selected">&nbsp;'.$dir.'</option>';
    }
}

echo "</select>&nbsp";
echo "</td></tr>";
echo "</table>";
?><?php

Modul "flowload 1.0 filelisting OUTPUT":

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     flowload 1.0 filelisting
* Author(s)   :     flow, jessix[at]gmx.net
* Created     :     16.12.2007
* Modified    :     02.04.2008 
*
************************************************/

// 02.04.2008: Ausgabe auf Templates umgestellt, Downloadzaehler herausgenommen (Upgrade-Faehigkeit erhalten) test@l-vogel.de

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',
                 '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 DB_Contenido;
if(!is_object($db_lastmodified)) $db_lastmodified = new DB_Contenido;

$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->next_record()) {

    $sql = "SELECT idupl, filename, dirname, filetype, size, description FROM ".$cfg['tab']['upl']." WHERE dirname = '".$db->f('dirname')."' ORDER BY idupl DESC";
	$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->next_record();
    $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]."&nbsp;&raquo;&nbsp;";
    }
    $print_dir = substr($print_dir, 0, -19);
    $print_dir .= " (".$db_folder->num_rows()." files)";
	
	$tpl = new Template;
	$tpl->reset();
	$tpl->set('d', 'PRINT_DIR',$print_dir);
	$tpl->set('d', 'LASTMODIFIED',$lastmodified);
	$tpl->next();
	$tpl->generate('templates/tpl.download_head.html');

	
    $cat_id++;

	#print_r($db_folder);

    while($db_folder->next_record()) {
        $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.'&nbsp;MB';
        } else {
            $printsize = $size.'&nbsp;kb';
        }
	
		$tpl = new Template;
		$tpl->reset();
		$tpl->set('d', 'ICON', $fileicon[strtolower($filetype)]);
		$tpl->set('d', 'DWNLINK', "front_content.php?idart=48&idcat=48&fid=".$idupl);
		$tpl->set('d', 'FILENAME', $filename);
		$tpl->set('d', 'SIZE', $printsize);
		$tpl->set('d', 'DESCR', $description);
		$tpl->next();
		$tpl->generate('templates/tpl.download_body.html');
		
    }
    
	$tpl = new Template;
	$tpl->reset();
	$tpl->set('d', 'DEBUG', "");
	$tpl->next();
	$tpl->generate('templates/tpl.download_foot.html');
	
	
    $db_folder->free();
}
$db->free();

?>

Modul "flowload 1.0 counter/redirecter" :

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     flowload 1.0 edirecter
* Author(s)   :     flow, jessix[at]gmx.net
* Created     :     16.12.2007
* Modified    :     02.04.2008
*
************************************************/

if(!isset($_GET['fid'])) exit;

// Db qry
$sql = "SELECT dirname, filename FROM ".$cfg['tab']['upl']." WHERE idupl = '".trim($_GET['fid'])."'";
$db->query($sql);
$db->next_record();
$dirname = $db->f('dirname');
$filename = $db->f('filename');

//if(!$db->f('filename')) exit;


$db->free();
// fuer mod rewrite absoluten Pfad verwenden:
header("Location: http://192.168.2.23/smt/cms/upload/".$dirname.$filename);

?>

Templates:

Tabellenkopf:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<!--  Modul Template: tpl.download_head.html -->

<h4>{PRINT_DIR}</h4>
<div class='lastmodified'>Letztes Update: {LASTMODIFIED}</div>
<table width="100%" border="0" cellpadding="0" cellspacing="0" class='dl_tbl'>
<tr>
  <th style="width: 34px;" class="dl_head">Art</th>
  <th style="width: 280px;" class="dl_head">Name</th>
  <th style="width: 80px;" class="dl_head">Size</th>
  <th class="dl_head">Description</th>
</tr>

<!-- END:BLOCK -->
Tabelle Body:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<!--  Modul Template: tpl.download_body.html -->

<tr>
  <td><img src="{ICON}"/></td>
  <td><a href="{DWNLINK}" target="_blank">"{FILENAME}"</a></td>
  <td>{SIZE}</td>
  <td>{DESCR}</td>
</tr>
<!-- END:BLOCK -->
Tabelle Fuss:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<!--  Modul Template: tpl.download_foot.html -->
</table>
<!-- {DEBUG} -->
<!-- END:BLOCK -->


[/code]

Gesperrt