En 3 parties « Question-Réponse / Discussion / Distillerie doc » issues et à partir de
- https://discuter.spip.net/t/saisie-fichier-et-cvt-multi-etapes/174190/19
- https://git.spip.net/spip/bigup/issues/4889
Voir aussi :
- https://git.spip.net/spip/bigup/src/branch/master/README.md
Q(@E) : Dans un cvt avec 2 étapes, j’ai dans le formulaire de l’étape 1, une saisie de type fichier.
Dans la fonction verifier_1 qui vérifie cette étape 1, je fait des contrôles sur $_FILES[mavar]
.
Tout ça marche bien.
Ensuite j’ai une étape 2 sans saisie fichier.
Quand je veux lancer le traitement final du formulaire, je repasse dans verifier_1 et là ça plante car il ne connait plus $_FILES[mavar]
.
Donc je suppose aussi que dans la fonction de traitement final ce sera pareil.
D’où ma question, comment puis-je conserver les données de $_FILES[mavar]
dans l’étape 2 et donc dans le traiter ?
Faut-il que je stocke via un set_request() les données de $_FILES[mavar]
dans une variable et si oui lesquelles ?
A(@Maï) : Il faut le plugin CVT Upload
et déclarer ta saisies fichiers comme étant utilisé par ton formulaire,
avec une fonction formulaires_xx_fichiers
Q : La saisie Fichiers de CVP Upload
est dans un fieldset et pas un div englobant comme les autres saisies. C’est normal/voulu ou c’est à corriger ?
A : la saisie permet 1 à N fichiers.
C’est voulu si on propose plusieurs input pour une meme saisie.
Discussion
@mar : J’ai du mal à comprendre l’intérêt de CVT Upload
, quand Bigup
gère aussi cela, notamment avec _bigup_rechercher_fichiers
retourné dans le Charger du formulaire, et éventuellement la saisie #SAISIE_FICHIER
? Mais quelque chose m’échappe peut être
@Ra : Inversement j’ai du mal à comprendre pourquoi BigUp
a refait une autre manière séparé et dépendante de son infrastructure (avec la lib JS etc), alors qu’il me semble que la mécanique CVT devrait savoir gérer la problématique « garder les fichiers uplaodés durant les hits PHP même quand on s’arrête durant verifier() ou du multi étapes » qu’on utilise BigUp
ou pas (qui est une lib JS pour uplaoder par drag n drop), càd y compris avec des inputs files classiques.
C’était tout l’objet de CVT Upload
de concevoir une extension à CVT qui gère cette problématique des FILES à garder en mémoire quelque soit les champs de fichiers, et même qu’on utilise Saisies ou pas : vraiment uniquement une extension à CVT seul. Pour être ensuite intégré au core donc vraiment à CVT, et qu’ensuite des plugins (BigUp, Saisies, autres) puissent utiliser ce mécanisme suivant leurs besoins.
Quant à #SAISIE_FICHIER
, ce n’est du coup pas une vraie Saisies, impossible à utiliser du coup dans la vraie API PHP complète, et donc impossible à déclarer comme champs possibles au « constructeur » pour Formidable, Champs Extras, etc.
@mar :
1) Bigup
conserve les fichiers y compris avec les inputs files classiques…
2) Bigup
par rapport à CVT Upload
:
- a) Oui le stockage est différent (car si tu réaffiches ton CVT en CVT upload
sans post / ajax, tu perds le fichier uploadé ; et je ne voulais pas cela pour les gros fichiers possibles avec Bigup
— avec Bigup, tant que tu affiches le même formulaire — et les mêmes arguments — que tu as déjà envoyé un fichier ou des morceaux de fichier, il sait les retrouver ; CVT Upload
lui liste les fichiers dans un _hidden
spécifique).
Les 2 solutions sont valides, mais si tu veux envoyer des gros fichiers et que ça coupe à la moitié, c’est plus sympa en recommençant le formulaire de ne pas avoir tout perdu.
- b) non le JS n’est pas indispensable à Bigup. Il a besoin de form
et formulaire_args
et ne s’active que si la clé _bigup_rechercher_fichiers
est passée dans le Charger
@ni : J’avais cherché à faire fonctionner la saisie bigup
en php, et peut être vais je y arriver avec « _bigup_rechercher_fichiers
retourné dans le Charger du formulaire ».
Testé en utilisant deux saisies bigup dans un CVT avec saisies générées en PHP
- Dans la fonction _saisies() :
[
'saisie' => 'bigup',
'options' => [
'nom' => 'unfichier',
'label' => 'Un fichier',
'multiple' => false,
'accept' => 'image/*',
'previsualiser' => 1,
'env' => true, /* Important ! */
],
],
// (...)
[
'saisie' => 'bigup',
'options' => [
'nom' => 'desfichiers',
'label' => 'Des fichiers',
'multiple' => true,
'accept' => 'image/*',
'previsualiser' => 1,
'env' => true,
],
],
Dans la fonction _charger() :
$valeurs = [
// ...
'unfichier' => '',
'desfichiers' => '',
'_bigup_rechercher_fichiers' => true,
];
Avec ou sans multiétapes, les fichiers sont bien préservés en cas d’erreur ou de navigation précédent suivant.
Testé en ligne en uploadant des fichiers lourds (vidéos de 100Mo), il n’y a pas de réupload à chaque étape, comme je peux en avoir parfois avec CVT upload.
Et dans _traiter()
, on reçoit bien un $_FILES
peuplé comme il faut.
Et contrairement à ce que je faisais dans mes premiers essais, inutile de calculer les $form
et $formulaire_args
pour recalculer le token, les pipelines de bigup s’en occupent tous seuls.
C’était à priori 'env' => true
qui me manquait dans la définition de la saisie.*
Distillerie doc
Ce qui précède sont des citations, à peine mises en formes et sans interprétation.
Cette 3e partie est une tentative de distillatin : l’extraction du sens.
À faire :
- qu’apprend-on dans ces échanges ?
- quelles informations gagneraient à être reportées dans les docs existant ou dans une nouvelle doc ?