Fileauswahl für Modul

CharlyBrown
Beiträge: 74
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Fileauswahl für Modul

Beitrag von CharlyBrown » Fr 25. Jan 2013, 14:36

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

Oldperl
Beiträge: 3989
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von Oldperl » Fr 25. Jan 2013, 16:07

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
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

McHubi
Beiträge: 992
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von McHubi » Fr 25. Jan 2013, 17:03

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&auml;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.'">&nbsp;'.$dirname.'</option>';
    } else {
        $selected = true;
        echo '<option value="'.$dirname.'" selected="selected">&nbsp;'.$dirname.'</option>';
    }
}

if (!$selected) {
    echo '<option value="0" selected="selected">'.i18n("Bitte w&auml;hlen").'</option>';
} else {
    echo '<option value="0">'.i18n("Bitte w&auml;hlen").'</option>';
}

#Choose image file
echo '</select>&nbsp;<input type="image" src="images/submit.gif">
    <tr><td class="text_medium" style="padding:5px">'.mi18n("Bild- oder Flashdatei w&auml;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&auml;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.'">&nbsp;'.$img_name.'</option>';
        } else {
            echo '<option selected="selected" value="'.$img_name.'">&nbsp;'.$img_name.'</option>';
        }
    }
}

echo '</select>&nbsp;<input type="image" src="images/submit.gif">';

/*
echo '<tr><td valign="top">&nbsp;'.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
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Die NEUAUFLAGE des Buchs zur Version 4.9: CONTENIDO für Einsteiger (4.9)

CharlyBrown
Beiträge: 74
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von CharlyBrown » Fr 25. Jan 2013, 17:40

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... :D

Frank

CharlyBrown
Beiträge: 74
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von CharlyBrown » Di 29. Jan 2013, 11:05

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

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Fileauswahl für Modul

Beitrag von Spider IT » Di 29. Jan 2013, 11:26

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é

CharlyBrown
Beiträge: 74
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von CharlyBrown » Di 29. Jan 2013, 12:01

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

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Fileauswahl für Modul

Beitrag von Spider IT » Di 29. Jan 2013, 14:08

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é

CharlyBrown
Beiträge: 74
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von CharlyBrown » Di 29. Jan 2013, 14:38

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

xmurrix
Beiträge: 2646
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von xmurrix » Di 29. Jan 2013, 16:24

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
CONTENIDO downloads: CONTENIDO 4.9.12
CONTENIDO links: Documentation, API documentation

CharlyBrown
Beiträge: 74
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von CharlyBrown » Di 29. Jan 2013, 16:34

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 :D

Gruß

Frank

xmurrix
Beiträge: 2646
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von xmurrix » Di 29. Jan 2013, 16:43

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.
CONTENIDO downloads: CONTENIDO 4.9.12
CONTENIDO links: Documentation, API documentation

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

Re: Fileauswahl für Modul

Beitrag von Faar » Di 29. Jan 2013, 18:03

Über diesen Scan-Button würde ich mich auch freuen, den haben vermutlich schon viele vermisst.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 2646
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Fileauswahl für Modul

Beitrag von xmurrix » Di 29. Jan 2013, 23:13

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.
CONTENIDO downloads: CONTENIDO 4.9.12
CONTENIDO links: Documentation, API documentation

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

Re: Fileauswahl für Modul

Beitrag von Faar » Mi 30. Jan 2013, 20:09

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.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Gesperrt