web-dev-qa-db-fra.com

Module Joomla personnalisé frontal pour télécharger une image et l'enregistrer dans le dossier d'images Joomla

Je travaille sur un module Joomla personnalisé qui permettrait aux utilisateurs de télécharger des images de profil. J'ai créé un JForm et je voulais utiliser le type de champ de formulaire "fichier" comme ci-dessous:

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

Le formulaire semble bon et je peux parcourir toutes les images de mon ordinateur et soumettre le formulaire. Cependant quand je vide les champs postés, je peux voir que mon champ photo a une simple chaîne avec le nom de l'image, pas même le chemin de celle-ci.

Ce que je voudrais faire, c'est saisir cette image, vérifier si elle est sûre, la télécharger et la placer dans un dossier Joomla spécifié sous le dossier images.

Cela ressemble à un cas d'utilisation courant, mais je n'ai pu trouver aucune description expliquant toute la chaîne. Ainsi, tous les conseils, liens, explications, échantillons de code seraient grandement appréciés.

Merci beaucoup, w.

1
wanderlusted

Après un peu plus de recherche sur Google et de débogage, je l'ai compris. L'astuce était que j'utilise un JForm et que le champ du fichier est accessible légèrement différemment. Vous devez d'abord accéder à la balise fields, puis au champ de fichier lui-même (voir la ligne en gras ci-dessous):

Le formulaire 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>

et le code pour télécharger l'image:

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