Download Modul: flowload 1.0 (Downloads in Kategorien)
Verfasst: 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:
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:
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):
"Leeres Layout" für den Counter/Redirecter. Vor dem Container darf keine Ausgabe erfolgen, da sonst header:(Location..) nicht funktioniert.
Modul "flowload 1.0 filelisting INPUT":
Modul "flowload 1.0 filelisting OUTPUT":
Modul "flowload 1.0 counter/redirecter"
Im Beispiel verwendete CSS Styles:
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.
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`;
Code: Alles auswählen
<container id="25" name="Text" types="Content" default="">Content 2</container>
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ä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.'"> '.$dir.'</option>';
} else {
echo '<option value="'.$dir.'" selected="selected"> '.$dir.'</option>';
}
}
echo "</select> ";
echo "</td></tr>";
echo "</table>";
?><?php
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]." » ";
}
$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'> </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.' MB';
} else {
$printsize = $size.' 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;
}