it-swarm.com.de

Benutzerdefiniertes Front-End-Joomla-Modul zum Hochladen und Speichern eines Bilds im Joomla-Bilderordner

Ich arbeite an einem benutzerdefinierten Joomla-Modul, mit dem Benutzer Profilbilder hochladen können. Ich habe eine JForm erstellt und wollte den Formularfeldtyp "Datei" wie folgt verwenden:

<field name="Photo" type="file" label="Profile photo" size="10" accept="image/*" />
<field
    name="MAX_FILE_SIZE"
    value="5242880"
    type="hidden"
/> 

Das Formular sieht gut aus und ich kann alle Bilder von meinem Computer aus durchsuchen und das Formular senden. Wenn ich jedoch die geposteten Felder speichere, kann ich sehen, dass mein Fotofeld eine einfache Zeichenfolge mit dem Namen des Bildes enthält, nicht einmal dem Pfad davon.

Ich möchte das Bild aufnehmen, prüfen, ob es sicher ist, es hochladen und in einen bestimmten Joomla-Ordner unter dem Bilderordner legen.

Das klingt nach einem häufigen Anwendungsfall, aber ich konnte keine Beschreibung finden, die die gesamte Kette erklärt. Hinweise, Links, Erklärungen und Code-Samles sind daher sehr willkommen.

Vielen Dank, w.

1
wanderlusted

Nach einigem googeln und debuggen habe ich es herausgefunden. Der Trick war, dass ich eine JForm verwende und auf das Dateifeld etwas anders zugegriffen werden kann. Zuerst müssen Sie auf das Feld-Tag und dann auf das Dateifeld selbst zugreifen (siehe die fette Linie unten):

Das Formular xml:

<form>
    <fields name="main">
        <fieldset name="basic" addfieldpath="/modules/mod_gng_regguide/models/fields">
...
        <field name="photo" type="file" label="Profile photo"/>
        </fieldset>
    </fields>
</form>

und den Code zum Hochladen des Bildes:

public static function uploadPhoto(GNGLocation $loc) {

        $input = JFactory::getApplication()->input;
        **$file  = $input->files->get('main')["photo"];** 


        // Cleans the name of the file by removing weird characters
        $filename = JFile::makeSafe($file['name']); 

        $src  = $file['tmp_name'];
        $dest = JPATH_SITE . "/images/Guides/" . $loc->get('name') . "/" . $filename;

        if (JFile::upload($src, $dest)) 
        {
            // The file has successfully been uploaded :)
        } 
        else 
        {
            // Oh crap, something happened. Run!
        }

    }
1
wanderlusted