Est-il possible depuis un formulaire BreezingForms de dynamiser le nom du dossier de réception et le nom du fichier transmis par un utilisateur ?
Niveau :
Facile
Version BF minimale requise :
BreezingForms Lite
Compatibilité Joomla! 4/5 :
✅
Situation
Depuis un formulaire BreezingForms, vous souhaitez proposer à vos utilisateurs la possibilité de charger un ou des fichiers de quelque type que ce soit. Vous souhaitez aussi avoir la possibilité de dynamiser le nom de dossier de réception et éventuellement le nom du fichier pour le faire correspondre à un format personnalisé et adapté à l'utilisateur p.ex.
Propriétés du champ de chargement de fichier
Vous avez préparé votre formulaire et y avez intégré un champ de chargement. Voyons comment le paramétrer pour la personnalisation du dossier de réception et du nom de fichier.
Dans l'arborescence des champs de votre formulaire, sélectionnez le champ de chargement de fichier. Dans le panneau des propriétés, cliquez l'onglet Avancé.
Par défaut, BreezingForms à prérempli le champ du répertoire de destination de la manière suivante {ff_uploads}
.
Ce code raccourci est originairement selon le chemin FTP suivant : racineSite/media/breezingforms/uplpads de sorte que chaque image chargée par le champ soit envoyé dans ce répertoire.
Nous pouvons ajouter divers codes de personnalisation et je les énumère ci-après et vous indique leur signification :
Codes pour la création de dossier
- {userid} = idUtilisateur
- {username} = nomUtilisateur_idUtilisateur
- {name} = nom_idUtilisateur
- {date} = date (aaaa_mm_jj)
- {datetime} = Date_Heure (aaaa_mm_jj_HH_mm_ss)
- {field:nomchamp} : Nom du champ nomChamp
- {nomchamp:value} : Valeur de saisie du champ nomChamp
Codes pour le nom de fichier :
- {filemask:FIELDNAME} = valeur de saisie du champ FIELDNAME
- {filemask:_separator} = Trait de soulignement _
- {filemask:_username} = NomUtilisateur de l'utilisateur enregistré et connecté
- {filemask:_userid} = idUtilisateur enregistré et connecté
- {filemask:_name} = Nom de l'utilisateur connecté
- {filemask:_datetime} = date (aaaa_mm_jj)
- {filemask:_timestamp} = Date_Heure (aaaa_mm_jj_HH_mm_ss)
- {filemask:_random} = Série de 10 chiffres au hasard.
Le nom de dossier / sous-dossier et le nom du fichier doivent être séparés par le caractère Pipe ( | ).
Combinaison nom de dossier + nom de fichier personnalisé.
Nous pouvons dès lors combiner ces codes afin d'obtenir une personnalisation poussée.
Exemple
{ff_uploads}/{nomdechamp:value}|{filemask:_name}{filemask:_separator}{filemask:_random}
donnera un fichier nommé Nom_1234567890.jpg dans le répertoire nommé selon la valeur du champ nomDeChamp
Si l'utilisateur n'est pas connecté, le nom de l'image ne peut être créé selon le nom de l'utilisateur, BreezingForms la nomme alors délibérément _1234567890.jpg
Exemple 2
Dans un formulaire pour lequel l'utilisateur ne doit pas être enregistré, proposez un champ de type texte, nommé prenom dans lequel vous demandez le prénom de l'utilisateur. Comme code d'enregistrement de fichier, vous pouvez utiliser le code suivant :
{ff_uploads}/{prenom:value}|{filemask:prenom}{filemask:_separator}{filemask:_random}
Pour obtenir le résultat suivant : monSite/media/breezingforms/uploads/Eddy/Eddy_1234567891.jpg
Sans suite après le caractère Pipe (indispensable), le nom de l'image ne serait pas modifié, mais le répertoire sera nommé à la valeur du champ prenom et donc selon le prénom de l'utilisateur : monSite/media/breezingforms/uploads/Eddy/monImage.jpg
ATTENTION :
Vos champs doivent être nommés sans trait de soulignement (_) sous peine de ne pas fonctionner ou de donner des résultats inattendus.
Si les noms de vos champs incluent des lettres capitales, il est important de n'utiliser que des minuscules dans la création de votre masque de création Répertoire/fichier.
Le tutoriel est mis à jour avec cette information suite aux commentaires que vous pourrez lire ci-après. Merci à la personne qui a remarqué la subtilité et nous l'avoir remontée. N'utilisant que des minuscules dans mes noms de champs, je ne m'étais jamais rendu compte de ce détail.
À vous de jouer !
Précision sur FIELDNAME
Bonjour,
Après de nombreuses tentatives infructueuses de nommage de fichier en souhaitant reprendre le contenu d'un champ pour nommer le fichier.
À chaque tentative j'obtiens un nom de fichier qui indique {filemask:mavaleur} en lieu et place de la valeur souhaitée (idem pour le nommage d'un sous-répertoire).
La solution très improbable tient dans le fait que mon champ est nommé MaValeur (avec les majuscules)
{filemask:MaValeur} ne fonctionne pas
{filemask:mavaleur} fonctionne et reprend bien la valeur contenue dans le champ
BreezingForms ne prend pas en compte, dans cette redéfinition du chemin ou du nom de fichier, les majuscules mais accepte le même nom de variable converti en minuscule !
Bonjour.
Je vais faire des essais selon votre exemple et reviendrai ci-dessous vous indiquer le résultat.
Pour le nom des champs, il est souvent préférable de n'utiliser que des minuscules et un underscore pour une éventuelle séparation des termes, p. ex. "mon_champ"
Cher Christophe.
Suite à quelques tests, je remarque que vous avez parfaitement raison. N'utilisant jamais de majuscules dans mes noms de champs, je ne m'étais jamais rendu compte de cette subtilité.
Nom fichier filemask
J'aurais voulu que le fichier soit renommé plus précisément avec le nom du champ genre :
"cv-recto-eddy.jpeg" (cv-recto est le nom du champ de téléchargement et eddy c'est {filemask:_name} )
Je ne vois pas cette possibilité avec les choix restreints des filemask.
Bonjour Denis.
Essayez de retirer les "-" du nom du champ, remplacez par un underscore (trait de soulignement) "_".
Si ça ne fonctionne toujours pas, essayez avec uniquement des lettres minuscules.
Bonsoir Eddy, pour préciser : ce n'est pas un pb de tiret, c'est juste un renommage de fichier (pas dossier) que je n'arrive pas à faire. Mais ce n'est peut-être pas possible.
C'est pour avoir cet exemple : "carterecto_Bob.jpeg"
"carterecto" est juste le nom du champ téléchargement dans le formulaire, c'est tout.
Le renommage de fichier avec les filemask marchent bien, mais pas pour avoir ce simple résultat. 😔
SOLUTION!!!!
Avant de me coucher la solution de crosstec!!
{ff_uploads}/carteidentiterecto{filemask:_separator}{filemask:nom}
Donc pas de filemask juste le nom!
OUF, je vais bien dormir! 😴
Bonjour Kami,
Je ne pense pas que ce soit prévu au programme BF, j'en suis navré.
Bon weekend
Bonjour Eddy et merci pour votre réponse. Cependant, dans le fichier facileforms.process.php, dans la function exppdf, lignes 5008 à 5042, il semblerait qu'on peut aussi ajouter des filemask pour créer un nom de fichier. Si je comprends bien, s'il trouve un $pdfname = $uploads . $fm . '.pdf' , le nom du fichier est personnalisé avec les filemask. Sinon il est de la forme ffexport-pdf-' . $date_stamp etc... Ou alors je confonds et cela n'a rien à voir ? Mais si ça pouvait, je creuserais bien la piste ! Bon we à vous aussi !
Kami,
Il me semble que ffexport... corresponde au fichier de données que l'on peut exporter depuis l'administration, pas dun fichier créé a l'occasion de la validation du formulaire. Mais je peux me tromper, je ne suis absolument pas calé en ce qui concerne la création des pdf depui BF.