Formulaire CVT et cases à cocher multiples

Bonjour à tous,

je cherche à mettre en place des cases à cocher multiples (input de type « checkbox » partageant le même attribut « name ») dans un formulaire de contact de type CVT (SPIP 2).

Plusieurs problèmes :

1/ Gestion de l’attribut « name » avec des crochets

[(#EDITABLE|oui)

aaa bbb xxx ]

Apparemment, les crochets dans l’attribut « name » sont interprétés par SPIP et entrent en conflit avec les crochets liés à la balise #EDITABLE. Est-il possible de les échapper ou de contourner le problème ?

2/ Test sur l’array (dans mon exemple, il s’agit de l’array « xxxx »)

Comment traite-t-on le tableau (array) généré dans le fichier formulaire « nomform.html » pour tester la présence d’une valeur dans ce tableau (je souhaite que les cases cochées le restent quand le formulaire retourne des erreurs de validation, donc je dois tester pour chaque case si sa valeur est présente dans le tableau xxxx) ?

Je dois pouvoir faire cela avec un filtre de test utilisant « in_array » (cf cet article), mais pas de succès pour l’instant.

Mes recherches restent pour l’instant infructueuses, si quelqu’un peut m’indiquer la marche à suivre ou bien m’indiquer où trouver de la documentation sur internet (si existante), il en sera remercié !

– P.C.

Pierre Caphellan a écrit :

*1/ Gestion de l'attribut "name" avec des crochets*

[(#EDITABLE|oui) <form>
<input type="checkbox" name="xxxx"> aaa
<input type="checkbox" name="xxxx"> bbb
<input type="checkbox" name="xxxx"> xxx
</form>
]

Apparemment, les crochets dans l'attribut "name" sont interprétés par SPIP
et entrent en conflit avec les crochets liés à la balise #EDITABLE. Est-il
possible de les échapper ou de contourner le problème ?

Il y a eu une discute récemment sur spip_dev
où je relève que tu peux utiliser :

#EVAL{"chr(xx)"}

ou

#VAL{XX}|chr

ou définir une balise :

// La balise #CHR, equivalent a #EVAL{"chr(XX)"}
function balise_CHR_dist($p) {
     if (($v = interprete_argument_balise(1,$p))!==NULL){
         $p->code = "chr(intval($v))";
         $p->type = 'php';
     }
     return $p;
}

avec XX = le code d'un crochet, ça doit te permettre de causer
sans interférence foireuse avec le parseur de spip.

JLuc

Bonjour à tous !

Pierre Caphellan wrote:

*2/ Test sur l'array (dans mon exemple, il s'agit de l'array "xxxx")*

Comment traite-t-on le tableau (array) généré dans le fichier formulaire
"nomform.html" pour tester la présence d'une valeur dans ce tableau (je
souhaite que les cases cochées le restent quand le formulaire retourne des
erreurs de validation, donc je dois tester pour chaque case si sa valeur
est présente dans le tableau xxxx) ?

Le message de Pierre tombe pile !

Je suis confronté au même problème:

j'ai un formulaire_bidule.html:
<BOUCLE_ToutesLesBidules(MOTS){id_article}{type="Bidules"}{par num titre}>

<li><label><input type="checkbox" name="tableau_de_bidules"
value="#TITRE" />#TITRE</label></li>

</BOUCLE_ToutesLesBidules>

D'abord, je ne sais pas comment faire pour déclarer "tableau_de_bidules"
dans la fonction Charger (formulaires_bidules_charger_dist()) ?? Suffit-il
d'écrire: $valeurs = array('tableau_de_bidules' => ''); ???

Et puis, pour la conservation des données, que doit-on tester dans le #ENV
quand c'est un tableau ???

[ (#ENV{tableau_de_bidules}|oui)checked] ???

Et pour les fonctions Vérifier et Traiter ? On utilise le tableau php
tableau_de_bidules ??

Est-ce que quelqu'un a essayé de faire des checkbox en CVT ? Ou alors est-ce
que quelqu'un connaît un code auquel se référer (core ? plugins ?) parce
que je n'ai pas trouvé !

Je débute complètement avec les CVT et je rame :-/

Amicalement;

NB pour Pierre: c'est quoi la balise #EDITABLE ?

--
MARNE Bertrand

Bonjour,

Je me réponds à moi-même après avoir questionné la liste spip-zone

MARNE Bertrand wrote:

j'ai un formulaire_bidule.html:
<BOUCLE_ToutesLesBidules(MOTS){id_article}{type="Bidules"}{par num titre}>
<li><label><input type="checkbox" name="tableau_de_bidules"
value="#TITRE" />#TITRE</label></li>
</BOUCLE_ToutesLesBidules>

D'abord, je ne sais pas comment faire pour déclarer "tableau_de_bidules"
dans la fonction Charger (formulaires_bidules_charger_dist()) ?? Suffit-il
d'écrire: $valeurs = array('tableau_de_bidules' => ''); ???

Et puis, pour la conservation des données, que doit-on tester dans le #ENV
quand c'est un tableau ???

[ (#ENV{tableau_de_bidules}|oui)checked] ???

Et pour les fonctions Vérifier et Traiter ? On utilise le tableau php
tableau_de_bidules ??

En fait c'est vraiment très simple (beaucoup plus que je ne l'imaginais):

dans cet exemple, il suffit d'écrire $valeurs = array('tableau_de_bidules'
=> ''); dans la fonction Charger

de façon générale: _request('tableau_de_bidules') dans les scripts PHP
pourra convenir.

Dans le squelette (formulaire) tableau_de_bidules sera retourné comme un
#ARRAY, donc: [ (#TITRE|in_array{#ENV{tableau_de_bidules}}|oui)checked]
permet de cocher les cases dans le formulaire déjà validé.

Merci beaucoup à Vincent (RastaPopoulos) pour son aide !

En espérant que ça répondra aussi à la question de Pierre !

NB: les CVT c'est vraiment super !!! :slight_smile:

--
MARNE Bertrand

Bonsoir,

D’abord, je ne sais pas comment faire pour déclarer « tableau_de_bidules »
dans la fonction Charger (formulaires_bidules_charger_dist()) ?? Suffit-il
d’écrire: $valeurs = array(‹ tableau_de_bidules › => ‹  ›); ???

Je crois que ça suffit.

Et puis, pour la conservation des données, que doit-on tester dans le #ENV
quand c’est un tableau ???

[ (#ENV{tableau_de_bidules}|oui)checked] ???

J’ai tenté un truc comme ça :

<input type=« checkbox » name=« objetDemandeDevis#EVAL{« chr(91) »}#EVAL{« chr(93) »} » value=« bilanCarbone »[ (« bilanCarbone »|in_array(#ENV{objetDemandeDevis})|?{‹ checked=« checked » ›})] />

Mais ça ne marche pas !
Cette partie n’est pas encore au point :
[ (« bilanCarbone »|in_array(#ENV{objetDemandeDevis})|?{‹ checked=« checked » ›})]

Quelqu’un aurait-il la solution ?

Et pour les fonctions Vérifier et Traiter ? On utilise le tableau php
tableau_de_bidules ??

En PHP il faut utiliser :
_request(« tableau_de_bidules »)
qui est de type array.

NB pour Pierre: c’est quoi la balise #EDITABLE ?

http://www.spip.net/fr_article3796.html

l’affichage conditionnel du formulaire de saisie en fonction de #EDITABLE : après la saisie, il est en général plus clair pour l’internaute de ne pas réafficher le formulaire complet mais juste le message de succès. #EDITABLE sert à cela.

– P.C.

Bonjour,

Et puis, pour la conservation des données, que doit-on tester dans le #ENV
quand c’est un tableau ???

Dans le squelette (formulaire) tableau_de_bidules sera retourné comme un
#ARRAY, donc: [ (#TITRE|in_array{#ENV{tableau_de_bidules}}|oui)checked]
permet de cocher les cases dans le formulaire déjà validé.

Complément d’information : si vous souhaitez tester la présence d’une chaîne de caractères, plutôt qu’une balise type #TITRE, il faut utiliser #VAL{chaine}, sinon ça ne passe pas.

Exemple :
[ (#VAL{chaineATester}|in_array{#ENV{tableau_de_bidules}}|oui)checked]

– P.C.

Et puis, pour la conservation des données, que doit-on tester dans le #ENV
quand c’est un tableau ???

Dans le squelette (formulaire) tableau_de_bidules sera retourné comme un

#ARRAY, donc: [ (#TITRE|in_array{#ENV{tableau_de_bidules}}|oui)checked]
permet de cocher les cases dans le formulaire déjà validé.

Complément d’information : si vous souhaitez tester la présence d’une chaîne de caractères, plutôt qu’une balise type #TITRE, il faut utiliser #VAL{chaine}, sinon ça ne passe pas.

Exemple :
[ (#VAL{chaineATester}|in_array{#ENV{tableau_de_bidules}}|oui)checked]

Encore plus fort : remplacer « in_array » par « in_any », ce qui évite les erreurs PHP quand #ENV{tableau_de_bidules} est vide (ce qui est le cas quand aucune case n’est cochée).

– P.C.

Bonjour,

Le fil tombe à pic parce que je me pose le même genre de question mais je ne comprends pas très bien. J'ai essayé en direct
[ (#VAL{chaineATester}|in_array{#ENV{tableau_de_bidules}}|oui)checked]
mais cela ne fonctionne pas. Est-ce parce que j'utilise SPIP 1.9.2c ?

J'ai lu dans le fil une allusion à Charger (formulaires_bidules_charger_dist()) de quoi s'agit-il ?

Merci

Pascale

Le 16 mars 09 à 11:43, Pierre Caphellan a écrit :

>
> Et puis, pour la conservation des données, que doit-on tester dans le #ENV
> quand c'est un tableau ???
>
Dans le squelette (formulaire) tableau_de_bidules sera retourné comme un

#ARRAY, donc: [ (#TITRE|in_array{#ENV{tableau_de_bidules}}|oui)checked]
permet de cocher les cases dans le formulaire déjà validé.

Complément d'information : si vous souhaitez tester la présence d'une chaîne de caractères, plutôt qu'une balise type #TITRE, il faut utiliser #VAL{chaine}, sinon ça ne passe pas.

Exemple :
[ (#VAL{chaineATester}|in_array{#ENV{tableau_de_bidules}}|oui)checked]

Encore plus fort : remplacer "in_array" par "in_any", ce qui évite les erreurs PHP quand #ENV{tableau_de_bidules} est vide (ce qui est le cas quand aucune case n'est cochée).

-- P.C.
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

irc://irc.freenode.net/spip ou http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

Bonjour,

Le 17 mars 2009 15:03, Pascale <technique@sdcinfo.com> a écrit :

Bonjour,

Le fil tombe à pic parce que je me pose le même genre de question mais je ne comprends pas très bien. J’ai essayé en direct

[ (#VAL{chaineATester}|in_array{#ENV{tableau_de_bidules}}|oui)checked]

mais cela ne fonctionne pas. Est-ce parce que j’utilise SPIP 1.9.2c ?

J’ai lu dans le fil une allusion à Charger (formulaires_bidules_charger_dist()) de quoi s’agit-il ?

Les formulaires CVT et le balise #VAL ont fait leur apparition avec SPIP 2, donc sauf erreur, ce fil ne correspond pas à ton cas de figure.

– P.C.