Seite 1 von 2
Fileauswahl für Modul
Verfasst: Fr 25. Jan 2013, 14:36
von CharlyBrown
Hallo,
für Bildergalerien muss in meinem Modul im Backend in der Konfiguration der Pfad zum Ordner vom Benutzer bestimmt werden.
Hier für gibt der User momentan in ein Inputfeld den Wert zum Zielordner manuell ein
upload/images/gallery/2013/januar/irgendwas
Je weiter das Ganze geschachtelt ist, desto fehlerhafter werden die Benutzereingaben, selbst wenn ich statische Teile (upload/images) vorbelege. Womit kann ich dem User eine bequemere Art der Dateiauswahl an die Hand geben, der mir dann den Pfad (innerhalb des Dateisystems) zurückgibt?
Da muss es irgendwas geben, was ich nicht kenne...
Gruß
Frank
Re: Fileauswahl für Modul
Verfasst: Fr 25. Jan 2013, 16:07
von Oldperl
Hallo Frank,
ein Select gefüllt mit den Pfaden ab deinem Vorgabe-Root-Ordner. Wird in diversen Modulen hier im Forum bereits für den Input-Bereich von Modulen genutzt. Contenido selbst bietet dafür nichts fertiges an. Aber du kannst dir mal die Klasse cms/includes/class.input.helper.php anschauen, da gibt es bereits Ähnliches für Artikel bzw. Kategorien.
Gruß aus Franken
Ortwin
Re: Fileauswahl für Modul
Verfasst: Fr 25. Jan 2013, 17:03
von McHubi
Hallo Frank,
hier mal der Input eines Moduls, über das Du ein Bild für die Ausgabe im Frontend auswählen kannst:
Code: Alles auswählen
echo mi18n("Bilddatei auswählen:").'</br>';
#Selected img directory
$cms_dirname = "CMS_VALUE[1]";
#Selected img
$cms_filename = "CMS_VALUE[2]";
/*
if ($cms_dirname == '' || $cms_dirname == '0') {
$cms_dirname = 'bilder/';
}
*/
#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">'.mi18n("Verzeichnis wählen").': </td>
<td class="text_medium" style="padding:5px">';
echo '<select name="CMS_VAR[1]" style="width:200px">';
#Get upload directories
$sql = "SELECT DISTINCT
dirname
FROM
".$cfg["tab"]["upl"]."
WHERE
idclient='$client' AND
filetype IN ('jpeg','jpg','gif','png', 'swf')
ORDER BY
dirname";
$db->query($sql);
$selected = false;
while ($db->next_record()) {
$dirname = $db->f('dirname');
if ($cms_dirname != $dirname) {
echo '<option value="'.$dirname.'"> '.$dirname.'</option>';
} else {
$selected = true;
echo '<option value="'.$dirname.'" selected="selected"> '.$dirname.'</option>';
}
}
if (!$selected) {
echo '<option value="0" selected="selected">'.i18n("Bitte wählen").'</option>';
} else {
echo '<option value="0">'.i18n("Bitte wählen").'</option>';
}
#Choose image file
echo '</select> <input type="image" src="images/submit.gif">
<tr><td class="text_medium" style="padding:5px">'.mi18n("Bild- oder Flashdatei wählen").': </td>
<td class="text_medium" style="padding:5px">';
echo '<select name="CMS_VAR[2]" style="width:200px">';
echo '<option value="0" selected="selected">'.i18n("Bitte wählen").'</option>';
if ($cms_dirname != '0') {
#Get uploaded files
$sql = "SELECT
filename
FROM
".$cfg["tab"]["upl"]."
WHERE
idclient = '$client' AND
filetype IN ('jpeg','jpg','gif','png','swf') AND
dirname = '$cms_dirname'
ORDER BY
filename";
$db->query($sql);
while ($db->next_record()) {
$img_name = $db->f('filename');
if ($cms_filename != $img_name) {
echo '<option value="'.$img_name.'"> '.$img_name.'</option>';
} else {
echo '<option selected="selected" value="'.$img_name.'"> '.$img_name.'</option>';
}
}
}
echo '</select> <input type="image" src="images/submit.gif">';
/*
echo '<tr><td valign="top"> '.mi18n("Beschreibung").':</td><td><textarea cols="40" rows="5" CMS_VALUE="100" name="CMS_VAR[100]" value="CMS_VALUE[100]">CMS_VALUE[100]</textarea></td></tr>';
*/
#Preview image
if ($cms_dirname != '0' AND $cms_filename != '0' AND strlen($cms_dirname) > 0 AND strlen($cms_filename) > 0) {
$img_path = $htmlpath.$cfgClient[$client]['upload'].$cms_dirname.$cms_filename;
$img_split = preg_split("/\./", $cms_filename);
$count = count($img_split);
$type = $img_split[$count -1];
echo '<tr><td></td><td style="padding:5px">';
if (substr($img_path,-3) != "swf") {
echo '<img style="width: 150px;" src="'.$img_path.'">';
} else {
$size = getimagesize ("$img_path");
echo '<object type="application/x-shockwave-flash" data="'.$img_path.'" id="Flash" '.$size[3].'>
<param name="movie" value="'.$img_path.'" />
<param name="bgcolor" value ="#FFFFFF" />
<param name="quality" value ="high" />
<param name="loop" value="false" />
<param name="menu" value="false" />
<param name="swliveconnect" value="true" />
</object>';
}
echo '</td></tr>';
}
echo '</td></tr>';
echo '</table>';
Den Part mit der Datei kannst Du ja rauswerfen oder auskommentieren. Du musst ja für Deine Zwecke nur den Inhalt von
$cms_dirname = "CMS_VALUE[1]"; an den Output übergeben.
Grüße,
Markus
Re: Fileauswahl für Modul
Verfasst: Fr 25. Jan 2013, 17:40
von CharlyBrown
Hallo Markus und Ortwin,
das ist schon eine Erleichterung! Auch die Option mit der Einzelauswahl und dem Thumb finde ich persönlich sehr charmant (für andere Zwecke kann ich das bestimmt noch nutzen).
Für mich reicht das erstmal. Grund genug, Euch in mein Nachtgebet einzuschließen...
Frank
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 11:05
von CharlyBrown
Hallo Markus (und alle anderen)
wenn jetzt aus dem Dateisystem ein Ordner gelöscht wurde und nicht mehr existiert, hält er sich aber hartnäckig in der DB-Tabelle (trotz Systembereinigung mit allen Optionen).
Kann mir jemand sagen, wie ich das umgehen kann (ohne den Eintrag händisch zu löschen)?
Gruß
Frank
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 11:26
von Spider IT
Hallo Frank,
du darfst das Verzeichnis nicht per FTP löschen, dann kriegt Contenido das so nicht mit.
Stattdessen musst du die Dateiverwaltung dafür nutzen.
Um den Fehler jetzt zu korrigieren musst du in der Dateiverwaltung das (gleichnamige) Verzeichnis wieder anlegen, dann da rein gehen (dann löscht Contenido die Einträge für nicht vorhandenen Dateien darin), und es dann wieder löschen.
Gruß
René
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 12:01
von CharlyBrown
Hallo René,
dank Dir, ja so klappt es. Schön geht allerdings anders...
In anderen CMSen gibt es so ewas wie Verzeichnisscan. Da werden DB-Einträge mit dem Filesystem synchronisiert. Das könnte man vielleicht bei der Systembereinigung mit einbauen.
Ich hab das auch schon mal ein einen anderen Thread geschrieben, die Auswahl von Verzeichnissen und Dateien aus den CMS-Typen finde ich insgesamt nicht mehr sonderlich kundenfreundlich. Ist da für die 4.9 was geplant?
Gruß
Frank
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 14:08
von Spider IT
Hallo Frank,
CharlyBrown hat geschrieben:In anderen CMSen gibt es so ewas wie Verzeichnisscan. Da werden DB-Einträge mit dem Filesystem synchronisiert. Das könnte man vielleicht bei der Systembereinigung mit einbauen.
ich habe mir dazu mal Gedanken gemacht.
Ein paar meiner Kunden haben Webseiten mit über 1000 MB, einer sogar über 1200 MB (da ist sogar die Datenbank über 900 MB groß).
Wenn da solch eine Synchronisierung laufen würde, würde das den Server doch arg belasten.
Gruß
René
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 14:38
von CharlyBrown
Vielleicht eine blöde Frage aber: Was ist denn der Hauptgrund dafür, dass die Verzeichnisse überhaupt in der Datenbank gespeichert werden? Oder anders herum, was spricht dagegen die Verzeichnisse z. B. unterhalb von "upload" so aufzurufen, wie sie auch beim Zeitpunkt des Abrufs auf dem Server liegen? Performance?
Gruß
Frank
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 16:24
von xmurrix
Spider IT hat geschrieben:...Ein paar meiner Kunden haben Webseiten mit über 1000 MB, einer sogar über 1200 MB (da ist sogar die Datenbank über 900 MB groß)...
Die Größe der DB ist erstmal irrelevant, viel wichtiger ist die Anzahl der Einträge in den Upload-Tabellen.
Man kann bei sehr vielen Upload-Verzeichnissen nicht jedes Mal die ganze Verzeichnisstruktur mit der Datenbank abgleichen, das würde bei sehr vielen Dateien/Verzeichnissen zu Performanceproblemen führen.
CharlyBrown hat geschrieben:...as ist denn der Hauptgrund dafür, dass die Verzeichnisse überhaupt in der Datenbank gespeichert werden? ...
Zur jeder Datei kann es Metainformationen wie Beschreibung, Titel, usw. geben und das pro Sprache. Diese Informationen werden meist gebraucht, um sie beim Generieren von Galerien mit auszugeben.
Wenn du die Dateiverwaltung oder die Metainformationen nicht brauchst, kannt du immer noch alles per FTP machen. Du must nur in deinem Galeriemodul dafür sorgen, dass diese nicht zuerst über die DB geht, sondern direkt das Verzeichnis scannt. Hast du einmal alle Dateien, kanst du immer noch bei Bedarf prüfen, ob dazu Informationen in der DB vorhanden sind...
Gruß
xmurrix
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 16:34
von CharlyBrown
xmurrix hat geschrieben:Man kann bei sehr vielen Upload-Verzeichnissen nicht jedes Mal die ganze Verzeichnisstruktur mit der Datenbank abgleichen, das würde bei sehr vielen Dateien/Verzeichnissen zu Performanceproblemen führen.
Ich hab das mal bei "Der-Dirigent" gesehen. Ist glaube ich ein alter Contenido-Fork. Dort konnte man jedenfalls in der Verzeichnisstruktur jeweils punktuell für Überordner oder einzelne Unterordner diesen Scan laufen lassen. Aber gut, man kann halt nicht alles haben
Gruß
Frank
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 16:43
von xmurrix
CharlyBrown hat geschrieben:...Dort konnte man jedenfalls in der Verzeichnisstruktur jeweils punktuell für Überordner oder einzelne Unterordner diesen Scan laufen lassen. Aber gut, man kann halt nicht alles haben...
Danke, ist ein guter Hinweis. Verbesserungen und Optimierungen sind immer willkommen.
In 4.9 wurde in Sachen Optimierung des Abgleichs zwischen DB und Verzeichnisstruktur was gemacht, allerdings weis ich aus dem Stegreif nicht, ob man das selber festlegen kann oder ob das System entscheidet, wann und wie tief der Scan gehen soll. Ich glaube mich zu erinnern, dass wir nun ein Button für die Synchronisation des aktuellen Ordners inkl. Ordner der nächsten Ebebe haben.
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 18:03
von Faar
Über diesen Scan-Button würde ich mich auch freuen, den haben vermutlich schon viele vermisst.
Re: Fileauswahl für Modul
Verfasst: Di 29. Jan 2013, 23:13
von xmurrix
Faar hat geschrieben:Über diesen Scan-Button würde ich mich auch freuen, den haben vermutlich schon viele vermisst.
Habe mir das gerade in 4.9 angesehen. Es gibt keinen Button zum Synchronisieren der Verzeichnisse, das geschieht automatisch. Immer, wenn man ein Verzeichnis auswählt wird dieses Verzeichnis und eine Ebene tiefer mit der DB abgeglichen.
Ich denke, da braucht man nicht zusätzlich einen Button dafür.
Re: Fileauswahl für Modul
Verfasst: Mi 30. Jan 2013, 20:09
von Faar
Könnte das auch bei der Version 4.8 der Fall sein?
Ich hatte mal den Eindruck, als wären nach einer Aktion die Dateien die per FTP hochgeladen wurden, in der Auswahlliste aufgetaucht.
Irgendwie scheint sich das nach und nach zu aktualisieren, vielleicht wenn man etwas hochlädt oder bearbeitet?
Ich könnte mich auch täuschen, weil als ich es mal ausprobieren wollte, ging es nicht.