Saisie fichier et cvt multi-étapes

Hello,

Petit sujet de saisie et cvt.
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 ?

Il faut que tu déclare ta saisies fichiers comme étant utilisé par ton formulaire, avec une fonction formulaires_xx_fichiers

Je ne suis pas sur de bien comprendre.
Je suis sur un CVT à deux étapes « classique » sans formidable ni saisies en PHP.
Que des #SAISIE.

Cela s’applique aussi ce que tu dis ?

Déjà est-ce que tu parles de la saisie fournie par le plugin CVT Upload ?

Comme expliqué dans la doc, Saisies ou pas Saisies, le plugin est indépendant, tu dois déclarer les champs « gérant des fichiers », dans une fonction « fichiers() » :

Sinon comme dit depuis le début, les balises #SAISIE sont juste des INCLURE écrits autrement. Sans rapport aucun avec l’API complète de Saisies et tout ce qu’elle permet. C’est comme si tu n’utilisais pas saisie, mais que tu faisais ton HTML toi-même avec des INCLURE juste pour mutualiser.

Le lien de @maieul montrait un exemple de comment Formidable déclare à CVT Upload les champs de type « fichiers », en allant lister les saisies de type « fichiers ». Mais toi comme tu n’utilises pas l’API mais juste la balise tu dois juste lister à la main avec le nom en dur du champ.

1 « J'aime »

Alors non, je n’utilise pas non plus le plugin CVT Upload.
Faut-il que je l’utilise pour que ce que tu m’expliques fonctionne ?

oui c’est prévu pour ca notamment

Une dernière petite question : 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 ?

c’est voulu si on propose plusieurs input pour une meme saisie.

Ouais la saisie permet 1 à N fichiers. Mais peut-être qu’on aurait pu complexifier le code pour simplifier le rendu final, afin que quand ya qu’un unique fichier ça puisse être juste vrai label + input, sans gros fieldset autour…

OK.
Autre question : quand on affiche la vue de saisie, on obtient quelque chose de ce type :

Ne faudrait pas arranger un peu mieux les différents constituants, genre le fichier au début sur tout le cadre (idem si plusieurs) et les boutons en dessous sur une même ligne et sur une autre ligne le bouton parcourir ?

Ça doit être faisaible en thémant en flex l’intérieur de chaque groupe non ? Et autre flex pour le parent pour faire des cards qui se suivent à 2 ou 3 par lignes.

On pourrait rajouter ça dans la CSS d’admin éventuellement, mais pour le site public ça reste à chacun thémer comme on veut.

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 !

Je pense que rien ne t’échappe c’est plutôt à moi que les choses échappent.
Mais j’avoue que déjà je connaissais pas CVT Upload mais encore moins BigUp.
Pour moi l’un ou l’autre me va, le tout c’est de savoir et je ne savais pas…

Après @rastapopoulos me disait qu’il y avait des différences entre les deux.
Après moi je n’ai besoin que de saisir un seul pauvre fichier dans un cvt multi.

Je découvre…

Et ça marcherait donc aussi en multi étapes ?

J’avais cherché à faire fonctionner la saisie bigup en php, et c’est peut être l’élément qui me manquait, cf :

(où je me pose aussi une autre question, sur la nécessite et le moyen de calculer $form et $formulaire_args)

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.

Peut-être que c’est aussi le cas, mais ce n’est pas ce qu’on en comprend (ni ce qui est concrètement non-découpé puisque imbriqué dans le plugin BigUp).

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.

D’où le fait qu’on a dit depuis un moment avec @maieul qu’il faudrait vraiment « fusionner », ou « dédoublonner » les fonctionnalités entre BigUp et CVT Upload, et que tout ça se retrouve si possible dans le core directement (et pas dans BigUp puisque ça doit marcher sans ce plugin optionnel, avec des input file basiques aussi).

Je n’ai jamais vraiment utilisé de saisies en PHP ; je ne sais pas trop comment elle fonctionnent derrière, ni comment tu pourrais lui faire envoyer une clé de plus dans le charger du formulaire. Pour les form et formulaire_args, je ne vois pas d’autre solution là que ce que tu proposes dans le ticket actuellement.

Bigup conserve les fichiers y compris avec les inputs files classiques…

  • Oui le stockage est différent (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.
  • Et 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

Le gros souci que je vois à BigUp (comme d’ailleurs pas mal de plugins-dist) c’est qu’il n’y a pas de doc.
Donc je ne vois pas comment j’aurais pu le trouver.

Après, là je suis un peu perplexe sur comment faire finalement pour résoudre mon problème :

  • avec CVT Upload ça marche nickel et c’est propre mais ça demande un plugin supplémentaire.
  • puis-je faire la même chose avec BigUp ce qui ne nécessiterait pas de plugin en plus et donc aurait ma préférence.

Enfin, je suis quand même étonné que ce sujet de fichier ne soit pas natif dans les CVT du Core.
Je parle bien de l’api et pas de la saisie.

Bé comme déjà dit, c’était tout l’objet de CVT Upload de faire un proof of concept qui marche pour l’intégrer au noyau CVT et surtout pas en plugin dist. C’est toujours mon avis, toute la partie « gestion PHP/stockage etc » de Bigup n’a strictement rien à voir avec le drag n drop et devrait être inclus directement dans CVT, avec des points d’entrées pour que BigUp Saisies etc puissent utiliser/compléter. Bigup ne devrait contenir que la gestion améliorée (optionnelle donc) d’upload JS par drag n drop.

Mais l’API de base « garder en mémoire les uploads sur plusieurs hits PHP » oui ça devrait être dans CVT core.

Home - bigup - SPIP on GIT + le readme, c’est largement plus que les autres plugins-dist !