> Dans un formulaire CVT à la fin d'une fonction traiter() je mets
> return(array('message_ok'=>'merci','editable'=>false). Mais dans le
> squelette [(#ENV{editable)] me donne malgré tout ' ' (true) ! Cela
> ne me semble pas normal, comme je comprends la chose si j'envoie
> 'editable'=>false, [(#ENV{editable)] devrait me donner '' (false).
>
> La valeur de $editable se choisi là :
>
http://trac.rezo.net/trac/spip/browser/spip/ecrire/balise/formulaire_.php#L103
> on a : $editable = (!isset($post[$e])) || count($erreurs) ||
> (isset($post[$editable]) && $post[$editable]);
>
> donc je n'envoie pas de 'message_erreur' $editable == true
$post[$e] ne correspond pas au message d'erreur mais au tableau des
erreurs renvoyé par verifier() le isset($post[$e]) vaut toujours true
(en principe) et donc (!isset($post[$e])) vaut toujours false.
count($erreurs) est vrai uniquement si il y a des erreurs (en sortie
de verifier, toujours), donc false si tu passe dans traiter()
> ou j'envoie un 'message_erreur' $editable == true le troisième ou
> ne servant finalement à rien.
>
> Il me semble que le formulaire ne devrait pas être éditable au
> renvoi de traiter() que si je le demande explicitement! Ainsi
> uniquement: $editable = (!isset($post[$editable])) ||
> $post[$editable];
non, il faut aussi que le formulaire reste editable en cas d'erreur
en sortie de verifier, c'est ce que fait la ligne concernée. Cela
dit, quelle version de SPIP utilises-tu car il y a eu des bugs de ce
coté en 2.1, corrigés par
http://trac.rezo.net/trac/spip/changeset/15806 et
http://trac.rezo.net/trac/spip/changeset/15809
SPIP 2.1.2 [15871]
Sinon, peux tu faire des var_dump pour voir quelle condition foire ?
... Comme souvent le bug a les deux mains sur le clavier.
tu dis «le isset($post[$e]) vaut toujours true (en principe)» : oui, sauf si la fonction verifier() ne renvoie rien !
Pour résumer au sortir de traiter() :
Le formulaire n'est PAS éditable par défaut, sauf si il y a un 'message_erreur' ou 'editable'=>true
Et le code fait effectivement cela. Il faut juste faire attention que sa propre fonction verifier() renvoie bien au minimum un tableau vide (ça marche si on ne défini pas cette fonction).
> Un autre problème est que si je veux un message d'erreur tout en
> envoyant 'editable'=>false, je ne peux pas :
>
http://trac.rezo.net/trac/spip/browser/spip/ecrire/public/aiguiller.php#L184
> ne prend pas en compte mon 'editable' si j'envoie aussi un
> 'message_erreur' par traiter() Je rajouterai donc à la ligne
> suivante: if (isset($rev['editable'])) $post["editable_$form"] =
> $rev['editable']; Le formulaire est toujours éditable par défaut,
> mais j'ai le droit de choisir.
Oui, en effet, on peut integrer ça.
Hé bien en fait non; car de toute façon le formulaire sera éditable si il y a un 'message_erreur' de verifier() ou de traiter(). Par contre cela ne permet pas de choisir explicitement de rendre le formulaire non éditable tout en ayant un message d'erreur, mais ce n'est pas bien grave.
Merci pour la réponse,
ArnAud.