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é !
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.
*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}>
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 :-/
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 !
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 ???
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.
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]
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).
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