Modul: Download Liste 4.6.

Matz82
Beiträge: 191
Registriert: Fr 26. Mai 2006, 13:10
Wohnort: Ilmenau
Kontaktdaten:

Beitrag von Matz82 » Mo 24. Jul 2006, 12:34

stese hat geschrieben:ohje ...
dein artikel, mit der idart 124 (wie in der konfiguration des modules angegeben, der auch das leere layout und das "Download File" modul enthält) ist entweder offline geschaltet (monitor symbol in der artikelübersicht ist schwarz).
~grinst~..das wars ^^ ..

oh gott bin ich doof :oops:
sorry :)

danke dir vielmals...ich hab das echt übersehen, da der artikel ja da war und in der konfig auch richtig eingetragen war
Viele Grüße,
Mathias


======================
Der letzte macht das Netz aus ! ;)
======================

MediaMuchacho
Beiträge: 71
Registriert: Do 3. Nov 2005, 15:01
Wohnort: Ulm
Kontaktdaten:

Beitrag von MediaMuchacho » Mi 30. Aug 2006, 14:02

Hallo zusammen

erstmal super Geschichte dieses Modul...verwende es derzeit in einem neuen größeren Projekt.

Und da fängt mein Problem schon an. Das Input Dropdown zeigt eine FTP Struktur an die garnicht mehr existiert. Das war einmal sozusagen aber inzwischen hat sich die Gesamte Struktur um 1000% geändert. Es gibt keinen einzigen dieser angezeigten Ordner mehr.

Ich versteh nicht so recht wieso das ist. Bin das Script jetzt das 3. mal am durchgehen.

Mal zum Projekt: Ich hab 2 Sprachen, das 4.6.8 Contenido und wirklich! viele Download Ordner... Bei einem anderen User scheint der die Seiten editiert und mit Inhalt füllt schaut das Modul gut aus und liest die richtigen FTP Daten aus....der ist aber kein sysadmin sondern nur eine Art Redakteur.

Fraglich ist für mich woran das liegen kann dass die Select liste mit derart falschen Daten gefüllt sind, die jeglicher Basis entbehren...
Media in Vita - Medienagentur
Webdesign, Programmierung, Design

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Mi 30. Aug 2006, 14:13

das liegt an deiner datenbank, dann daraus bezieht die select ihre informationen. da werden sicher noch die alten pfade drinnen stehen - schau dir mal die con_upl und weitere zusammenhängende tabellen an - du wirst erstaunt sein, wie viele pfadangaben zu finden sind.

da ich im input bereichs des modules probleme hatte auf das filesystem zuzugreifen, nutze ich die datenbank. (theoretisch müssten bei dir auch in standard bildmodulen die pfade falsch sein)

MediaMuchacho
Beiträge: 71
Registriert: Do 3. Nov 2005, 15:01
Wohnort: Ulm
Kontaktdaten:

Beitrag von MediaMuchacho » Mi 30. Aug 2006, 14:16

ja ich habe es gerade bemerkt...es ist tatsächlich so!

Meine Uploads sind alle via FTP installiert worden unter umgehung des Contenido eigenen Upload Systems...

Die Frage ist ja jetzt wie schafft es Contenido die so problemlos im Backend auszulesen...da steckt die Funktion ja quasi schon drin.

Für viele Uploads ist das Backend leider nicht geeignet...ich hab ca 50-70 Ordner und je Ordner dann jeweils einige Files..das via Webformular zu machen ist ne Arbeit für Leute die mehr Zeit haben als wir hier ;-)

Hast du vielleicht ne Idee wo man die Funktion findet die im Backend angewandt wird?
Media in Vita - Medienagentur
Webdesign, Programmierung, Design

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Mi 30. Aug 2006, 14:24

irgendwo in der function.upl.php könnte ich mir vorstellen ...

ich hatte halt keinerlei chance auf das filesystem in input zuzugreifen (output war überhaupt kein problem) er hat einfach nichts mehr ausgegeben ... kann aber durchaus sein, dass da bestimmte php versionen buggy sind, denn bei nachfrage damals konnte es mir keiner bestätigen

aber viel interessanter ist eigenlich, die upload tabellen von alten datensätzen automatisiert zu entfernen, denn das wird glaube ich momentan nicht gemacht - sollte man mal nen cronjob zu basteln

MediaMuchacho
Beiträge: 71
Registriert: Do 3. Nov 2005, 15:01
Wohnort: Ulm
Kontaktdaten:

Beitrag von MediaMuchacho » Mi 30. Aug 2006, 14:26

habe gerade eine funktion gesehen die ne art sync macht...bin mir aber nicht ganz schlüssig ob die jetzt die sprachen miteinander syncronisiert oder die ordner mit den datenbank einträgen...

ist aus der besagten functions.upl.php

Code: Alles auswählen

/**
 * uplSyncDirectoryDBFS ($path)
 * Sync database contents with DBFS
 *
 * @param string $path Specifies the path to scan 
 */
function uplSyncDirectoryDBFS ($path)
{
	global $cfgClient, $client, $cfg, $db;
	
	$uploads = new UploadCollection;
    $properties = new PropertyCollection;
    $dbfs = new DBFSCollection;
    
    if ($dbfs->dir_exists($path))
    {
    	$strippath = $dbfs->strip_path($path);
    	
    	$dbfs->select("dirname = '$strippath'");
    	
    	while ($file = $dbfs->next())
        {
        	if ($file->get("filename") != ".")
        	{
        		$uploads->sync($path."/", $file->get("filename"));
        	}
        }
	}

	$uploads->select("dirname = '$path/' AND idclient = '$client'");

    while ($upload = $uploads->next())
    {
    	if (!$dbfs->file_exists($upload->get("dirname").$upload->get("filename")))
    	{
    		$uploads->delete($upload->get("idupl"));
    	}	
    }
    
    $properties->select("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '".$path."%'");
    
    
   	while ($property = $properties->next())
   	{
   		if (!$dbfs->file_exists($property->get("itemid")))
		{
			$properties->delete($property->get("idproperty"));	
		}
   	}        
    
	return;
}
Wäre doch auch nicht verkehrt die Datenbank einfach upzudaten oder?
Media in Vita - Medienagentur
Webdesign, Programmierung, Design

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Mi 30. Aug 2006, 14:36

prinzipiell nicht ;) wird sowieso geschehen, wenn du das erste mal in die dateiverwaltung in den ordner gehst - problem: das ding entfernt dir meines wissens nicht mehr nichtexistente pfade aus der db - so dass du irgendwann ettliche, nichtexistente pfade in der db hast

MediaMuchacho
Beiträge: 71
Registriert: Do 3. Nov 2005, 15:01
Wohnort: Ulm
Kontaktdaten:

Beitrag von MediaMuchacho » Mi 30. Aug 2006, 14:38

So ich hab wohl ne Lösung gefunden.

Dinkel hat in seinem Up & Download Modul eine direkte FTP Ordnerliste in ein Select Menü gepackt. Funktioniert astrein. Werde mal sehen ob man das als Alternativ Version hierfür basteln kann...sitze zumindest dran.

Aber das mit dem Sync bzw dem updaten der DB ist auch ein interessanter Ansatz.

Hiermal der Code den Dinkel verwendet hat...bereinigt um alles was für das Select Menü nicht nötig ist...

Code: Alles auswählen

class pfad {

   function pfad($pfad) {
      $this->pfad = $pfad;
      $this->pathlen = strlen($this->pfad);
   }

   function getPath($root,$level = 0) {
      $content = $this->readDir($root);

      foreach ($content as $file) {
         if (is_dir($root.$file)) {
            $verzeichnis = substr($root,$this->pathlen);
            $returnvalue["{$verzeichnis}{$file}/"] = str_repeat(" ",$level * 5).$file;
            $returnvalue = array_merge($returnvalue,$this->getPath($root.$file."/",$level+1));
         }
      }

      return $returnvalue;
   }

   function readDir($path) {
      $handle = opendir($path);

      while ($file = readdir ($handle)) {
         if ($file != "." && $file != "..") $returnvalue[] = $file;
      }
      closedir($handle);

      return $returnvalue;
   }

   function makeSelect($preselection) {
      $pfad = $this->getPath($this->pfad);

      foreach ($pfad as $key => $value) {
         if ($preselection == $key) {
            echo "<option value=\"$key\" selected=\"selected\">$value</option>";
         } else {
            echo "<option value=\"$key\">$value</option>";
         }
      }
   }
}

$pfad = new pfad($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload']);

echo '<table cellspacing="0" cellpadding="0">
	<tr>
         	<td>Download Ordner: </td>
                 <td><select size="1" name="CMS_VAR[4]" />';
		$pfad->makeSelect("CMS_VALUE[4]");
		echo '</td>
         </tr>
</table>';
Media in Vita - Medienagentur
Webdesign, Programmierung, Design

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Mi 30. Aug 2006, 14:49

wenn er bei dir funzt, isses doch super.

dieser passus funktionierte damals in irgend ner php 4.3.xer version nicht im input auf meinem server - im output allerdings schon:

Code: Alles auswählen

function readDir($path) {
      $handle = opendir($path);

      while ($file = readdir ($handle)) {
         if ($file != "." && $file != "..") $returnvalue[] = $file;
      }
      closedir($handle);

      return $returnvalue;
   } 


denn den hatte ich damals so ähnlich auch geschrieben

MediaMuchacho
Beiträge: 71
Registriert: Do 3. Nov 2005, 15:01
Wohnort: Ulm
Kontaktdaten:

Beitrag von MediaMuchacho » Mi 30. Aug 2006, 14:57

naja, die eleganteste Lösung wäre sicher eine Synchronisation mit der ftp ordnerstruktur...

Wenn dir was dazu einfällt unterstütze ich dich gerne. Ich seh aber glaub den Wald vor lauter Bäumen nicht und schreib ja auch noch in nem anderen modul an ner Änderung mit.

Ich meine die ordnerstruktur auszulesen ist ja jetzt nicht so der akt.
Wenn man weiß wo das in der DB abgelegt wird kann man das gewiss auch sicher so arrangieren, dass die DB stets dem FTP Verzeichniss entspricht. Vielleicht ne Abfrage bevor das Select Menu im Input erstellt wird? (Obwohl das sicherlich auch ein Problem ist wenn die FTP Ordner schlicht nicht ausgelesen werden können...)
Media in Vita - Medienagentur
Webdesign, Programmierung, Design

votapero
Beiträge: 63
Registriert: Do 9. Mär 2006, 15:04
Kontaktdaten:

Sortierun / LastMod

Beitrag von votapero » So 17. Sep 2006, 09:50

Hallo stese,
tolles Modul !!
Ist es eine grosse Sache, zusätzlich das "Last Modified" Datum einzublenden und nach diesem zu sortieren?

Ich möchte eigentlich die neusten" Dokumente zu oberst anzeigen und sehen, wann die Aenderung/Upload geschehen ist.

Danke.

falkirk
Beiträge: 17
Registriert: So 12. Feb 2006, 19:47
Kontaktdaten:

Datei Filter

Beitrag von falkirk » Sa 28. Okt 2006, 17:05

Ich hätte da noch eine kleines Problem resp. eine bitte das Modul zu erweitern.

Da ich manchmal aus einem Ordner in der Dateiverwaltung nur ein paar Files in der Download-Liste aufgeführt haben möchte, wäre es für mich wirklich sehr nützlich zu dem Dateiendungs-Filter noch einem Filter für die Dateinamen zu haben.

Leider bin ich im Script schreiben nicht gerade super.
Es wäre also genial von dir wenn du mir den angepassten Modul Code posten könntest.

Vielen Dank

PS: Kompliment für dein geniales Modul.

falkirk
Beiträge: 17
Registriert: So 12. Feb 2006, 19:47
Kontaktdaten:

Filter für Dateinamen

Beitrag von falkirk » Mo 6. Nov 2006, 16:41

Kann mir da wirklich niemand auf die schnelle weiterhelfen.
Es dürfte doch eigentlich nicht so ein Problem sein
dieses Modul mit einem Filter für Dateinamen zu erweitern,
da es ja schon einen für Dateiendungen gibt. Wenn ich mich etwas besser auskennen würde, würde ich das auch selbst machen. Aber ich habe jetzt schon einige Stunden versucht diese Scripte von Dateityp auf Dateinamen anzupassen aber ich kriegs einfach nicht hin.

Ich wäre euch wirklich dankbar.

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Mo 6. Nov 2006, 17:36

nicht getestet - aber probiere mal:

Modul "Download List" Input:

Code: Alles auswählen

?>
<?php
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname  :    Download List
* Author(s)  :    Stefan Seifarth <info@polycoder.de>
* Copyright  :    www.polycoder.de / www.htcm.de
* Created    :    2006-01-07
* Modified   :    2006-11-06
************************************************/

cInclude ("classes", "class.upload.php");


// get all directories from database
$dllist_collection = new UploadCollection ();
$dllist_collection->select("","dirname","dirname ASC");

$arr_found_dirs = array();
$arr_dirs = array();
while ( $dllist_item = $dllist_collection->next() ) {
   $arr_found_dirs[] = $dllist_item->get("dirname");
}

$i = 0;
foreach ($arr_found_dirs as $str_dir) {
   $arr_current_dir =  explode("/",$str_dir );
   array_pop($arr_current_dir);
   
   $depth = count($arr_current_dir);
   
   if ( $depth == 0 ) {
      $arr_dirs[$i]["name"] = str_replace("/", "", $cfgClient[$client]["upload"]);
   } else {
      $arr_dirs[$i]["name"] = $arr_current_dir[$depth-1];
   }
   $arr_dirs[$i]["depth"] = $depth;
   $arr_dirs[$i]["path"] = $str_dir;
   $arr_dirs[$i]["indent"] = "";
   
   for ($z = 1; $z <= $depth; $z ++) {
      # 3 blanks for every level
      $arr_dirs[$i]["indent"] .= "&nbsp;&nbsp;&nbsp;";
   }
   
   $i++;
}


// print out directory selectbox
$str_predefined = trim("CMS_VALUE[110]");

print mi18n("Verzeichnis für Downloads auswählen") . ":\n<br>";
print '<select name="CMS_VAR[110]">' . "\n";
// output of all found directories
foreach ( $arr_dirs  as $arr_dir ) {
   $str_selected = "";
   if ( $str_predefined == $arr_dir["path"] ) $str_selected = ' selected="selected"';
   
   print '<option value="' . $arr_dir["path"] . '"' . $str_selected . '>' . $arr_dir["indent"] . $arr_dir["name"] . '</option>' . "\n";
}
print '</select>' . "\n";

print '<br><br>' . "\n";

// print out fileextensions
print mi18n("sichtbare Dateiendungen<br>(leergelassen = alle Dateien, mehrere Dateitypen durch Komma abtrennen )") . ":\n<br>";
print '<input type="text" name="CMS_VAR[111]" value="CMS_VALUE[111]">' . "<br><br>\n";

// print out fileextensions
print mi18n("Dateifilter<br>(leergelassen = alle Dateien, Filter wie unter Windows nutzen: ?datei*)") . ":\n<br>";
print '<input type="text" name="CMS_VAR[113]" value="CMS_VALUE[113]">' . "<br><br>\n";


// print out download article
print mi18n("Artikel idart für Downloadzähler<br>(leergelassen = Download ohne Zähler)") . ":\n<br>";
print '<input type="text" name="CMS_VAR[112]" value="CMS_VALUE[112]">' . "\n";

?>
<?php
Modul "Download List" Output:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :    Download List
* Author(s)  :    Stefan Seifarth <info@polycoder.de>
* Copyright  :    www.polycoder.de / www.htcm.de
* Created    :    2006-01-07
* Modified   :    2006-11-06
************************************************/
cInclude ("classes", "class.upload.php");
cInclude ("classes", "class.properties.php");
cInclude ("classes", "class.htmlelements.php");
cInclude ("includes", "functions.upl.php");


// template defined vars
$dllist_path = "CMS_VALUE[110]";
$dllist_extensions = trim("CMS_VALUE[111]");
$dllist_idart = trim("CMS_VALUE[112]");
$dllist_filenamefilter = trim("CMS_VALUE[113]");

// add filetype condition
$str_where_filetype = "";
if ( strlen ($dllist_extensions) > 0) {
   $arr_extensions = explode (",",$dllist_extensions);
   
   $arr_where = array();
   foreach ($arr_extensions as $str_extension) {
      $arr_where[] = "filetype ='" . trim($str_extension) . "'";
   }
   
   $str_where_filetype = ' ( ' . implode( " OR ", $arr_where ) . ' ) AND ';
}

// add filename filter condition
$str_where_filenamefilter = "";
if ( strlen ($dllist_filenamefilter) > 0) {
   // replace special chars for wildcards
   $dllist_filenamefilter = str_replace("%","\%", $dllist_filenamefilter);
   $dllist_filenamefilter = str_replace("_","\_", $dllist_filenamefilter);
   $dllist_filenamefilter = str_replace("*","%", $dllist_filenamefilter);
   $dllist_filenamefilter = str_replace("?","_", $dllist_filenamefilter);
   $str_where_filenamefilter = ' filename LIKE "' . mysql_escape_string($dllist_filenamefilter) . '" AND ';
}

// get list of all files
$dllist_collection = new UploadCollection ();
$dllist_collection->select($str_where_filenamefilter . $str_where_filetype . " dirname = '" . $dllist_path . "'","","filename ASC");

// initialize needed objects
$obj_file_properties = new PropertyCollection();
$obj_icon = new cHTMLImage();
$obj_description = new cHTMLDIV();

// reset template
$tpl = new Template();
$tpl->reset();

// add head description
$tpl->set("s","HEAD_NAME", mi18n("Dateiname") );
$tpl->set("s","HEAD_FILETYPE", mi18n("Dateityp") );
$tpl->set("s","HEAD_FILESIZE", mi18n("Größe") );
$tpl->set("s","HEAD_COUNTER", mi18n("Downloads") );

// run file list
$image_id = 0;
while ($dllist_item = $dllist_collection->next() ) {
   $image_id++;
   
   // icon for file
   $obj_icon->setSrc( uplGetFileIcon($dllist_item->get("filename")) );
   $obj_icon->setID("dlIco".$image_id);
   
   // file description
   $str_file_description = "";
   if (strlen($dllist_item->get("description"))> 0) {
      $obj_description->setContent($dllist_item->get("description"));
      $obj_description->setClass("fileDescription");
      $str_file_description = $obj_description->toHTML();
   }
   
   // filename
   $str_file_name = $dllist_item->get("filename");
   $str_file_name_property = $obj_file_properties->getValue("upload", $dllist_item->get("dirname").$dllist_item->get("filename"), "file", "medianame");
   if (strlen($str_file_name_property) > 0) {
      $str_file_name = $str_file_name_property;
   }
   
   // filecounter
   $str_file_counter = "0";
   $str_file_counter_property = $obj_file_properties->getValue("upload", $dllist_item->get("dirname").$dllist_item->get("filename"), "file", "counter");
   if ( strlen ($str_file_counter_property) > 0 ) {
      $str_file_counter = $str_file_counter_property;
   }
   
   // file url
   $str_file_url = $cfgClient[$client]["upl"]["htmlpath"] . $dllist_item->get("dirname") . $dllist_item->get("filename");
   if ( isset($dllist_idart) && !empty($dllist_idart) && (int)$dllist_idart > 0 ) {
      $str_file_url = $sess->url("front_content.php?idart=" . $dllist_idart . "&changelang=" . $lang .  "&client=" . $client . "&sse_idupl=" . $dllist_item->get("idupl") );
   }
   
   // fill template
   $tpl->set("d", "FILE_ICON", $obj_icon->toHTML() . '&nbsp;');
   $tpl->set("d", "FILE_NAME", $str_file_name );
   $tpl->set("d", "FILE_TYPE", $dllist_item->get("filetype") );
   $tpl->set("d", "FILE_SIZE", human_readable_size($dllist_item->get("size")) );
   $tpl->set("d", "FILE_COUNTER", $str_file_counter );
   $tpl->set("d", "FILE_DESCRIPTION", $str_file_description );
   $tpl->set("d", "FILE_URL", $str_file_url );
   
   $tpl->next();
}

// set template
$str_template_name = "download_list.html";
if ( isset($dllist_idart) && !empty($dllist_idart) && (int)$dllist_idart > 0 ) {
   $str_template_name = "download_list_counter.html";
}

// print template
print $tpl->generate($cfgClient[$client]["tpl"]["path"] . $str_template_name, 1, 0);

?>

falkirk
Beiträge: 17
Registriert: So 12. Feb 2006, 19:47
Kontaktdaten:

Beitrag von falkirk » Mo 6. Nov 2006, 18:21

Funktioniert schon fast. Ist auch schon ziemlich nahe dran von dem was ich gedacht habe.

Es gibt nur noch ein Problem:
Leider krieg ich jeweils nur eine Datei in die Liste.
Sobald ich mehrere Dateinamen mit Komma getrennt eingebe erscheint nichts mehr in der Liste.

Was natürlich ultimativ wäre, dass ich den Dokumentennamen auch abgekürzt eingen, und somit Filtern könnte.
z.B. Datei mit dem Namen "2006.11.06_xyz.pdf" nur 2006.11.06* eingeben müsste. Halt so wie bei der Windows suchfunktion. Aber dies wäre natürlich nur ein gewünschter Zusatz.

Wichtig wäre einfach dass ich mehrere Dateinamen eingeben kann die mir anschliessend in der Liste angezeigt werden.

Gesperrt