CVT charger() et input de type array

Bonjour,
N’arrivant pas à ajouter un traitement à un formulaire Formidable je teste une autre piste via les formulaires CVT.
On a un formulaire qui dans lequel on a une saisie (créée par nous) qui liste un ensemble de « produits » … chaque input a comme « name » un truc du genre « produits[4][] » ou « 4 » est l’id du produit, la « value » correspondante étant la quantité choisie pour ce produit.
On a essayé pas mal de chose pour récupérer ces valeurs dans la fonction « charger() » des formulaires CVT, sans succès jusqu’ici …
Par ex:

$valeurs = array('email'=>'','nom'=>'','prenom'=>'','tel'=>'','produits'=>'');

Avec ensuite dans traiter() par ex pour essayer de voir les valeurs: dans le corps du mail envoyé:

$message = 'salut:'.var_dump($valeurs['produits']);

Evidemment si je suis là c’est que ça ne marche pas :slight_smile: J’ai essayé pas mal de syntaxes, avec des [], des [][], et toutes les combinaisons intermédiaires, je me demandais s’il y avait quelque part un exemple avec quelque chose d’un peu plus complexe que l’exemple du formulaire contact avec de simples input (ci-dessus ça marche évidemment pour email, nom, prenom, …). Merci d’avance pour les pistes éventuelles.
Pierre

Bonjour,
ça me parait normal que tu ne récupères pas les champs formidable de façon générique puisqu’ils ne sont pas nommés « email » ou « prenom » mais « input_4 » et 'input_12" !

Regarde peut-être par ici, https://git.spip.net/spip-contrib-extensions/formidable_inscription
ce plugin offre une exemple de mise ne place pour choisir en BO via l’interface traitements de champs de formidable quel champ est relié à « email » ou « prenom »

Sinon array_keys est peut-être ton amie

Je ne comprends pas trop ce que tu essayes de faire. Il me semble que tu prends le problème par la fin, et que tu devrais au moins apprendre/comprendre les mécanismes de base de l’API « CVT » des formulaires de SPIP pour savoir ce que tu fais. Tout ce chapitre :

La fonction charger() sert à 1) déclarer les champs « autorisés », et 2) pré remplir les valeurs de départ uniquement si pertinent. Donc déjà le concept de « récupérer ces valeurs dans la fonction charger() » je ne comprends pas trop qui que quoi pourquoi, c’est plutôt dans verifier() et traiter() qu’on récupère les valeurs ensuite.

La fonction traiter() sert à faire le traitement final si ya aucune erreur possible avant. Et dans ce cas bah tu récupères les valeurs des « name » des champs HTML. Donc si ton name=truc c’est « produits », tu le récupères avec… _request('produits') (fonction de base de SPIP qu’il est rigoureusement obligatoire de connaitre dès lors qu’on touche au PHP) :


RastaPopoulos

Euh rasta ? Il me semble que PierrOt parle de formulaire dans formidable là …
Oups, non, c’est vrai, PierrOt parle de CVT, bah alors PierrOt on fvet vendre sur internet et on sait pas se servir de CVT, c’est comme dit Rasta pas très compliqué, la doc est très bien faite !

Bonjour,

@touti : Non rasta a raison, il s’agit de formulaire CVT, pas Formidable (que je mentionnais juste car c’était une autre piste pour moi.) Non on essaye de concocter un formulaire de réservation … pas de vente pour l’instant :slight_smile: J’avais fait un gros CVT il y a quelques années en arrière, je m’y replonge.

@rastapopoulos :
Dans charger() un $valeurs = array('email'=>''); affiche un input avec une value vide si je comprends bien au chargement du formulaire, comment faire pour initialiser la valeur de stock par défaut dans le cas de mon array, j’ai une 20aine d’input comme suit, « XX » étant l’id produit:

<input type="number" min="0" max="10" name="produits[XX][]" value="0" />

Si je fais $valeurs = array(produits'=>'10'); ça n’a pas l’air de marcher … La doc conseille bien de mentionner tous les champs du formulaire dans charger() je cite: " Même si la valeur par défaut est vide, il est important de faire figurer le champ dans le tableau retourné par la fonction charger(). En effet, SPIP utilise ensuite ce tableau pour savoir quels champs seront saisis."

Mais bon effectivement, il y a peut-être un truc qui m’échappe …
Pierre