Catégories:
Bonjour,
Dans une fonction _validate, je modifie $form et $form_state et c’est pris en compte quand tout va bien.
Si la validation plante (ex pas de titre), ma fonction est bien exécutée mais visiblement sur des clones de $form et $form_state, car mes modifs sont ensuite ignorées par drupal_render_form :-/
C’est normal docteur ?
(apparemment, _form_validate envoie une copie de $form qui n’est pas récupérée ensuite, mais pour form_state les modifs devraient être prises en compte non ?)
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Je sais que tant que le formulaire n’est pas valider rien ne se passe ton form n est pas submiter du tout.Au pire debug dans form validate tu verra direct
MOMO Drupal en force
mbehmane
866
C’est bien mon pb, tout ce que je fait dans le _validate n’est pas pris en compte au drupal_render_form (et donc des cases cochées se «décochent»).
dcaillibaud
21
pour moi un forme en dupal tu le créee dans la fonction _form(&$form_state, $id = NULL) ou tu return un $form
Riena qu avec ca ton form apparait ensuit le _form_validate c’est pour faire des verif à savoir sur les champ et renvoyer des message d’erreur si tu le desire.
Ensuit dans le _form_submit($form, &$form_state) tu recupere tes donnees modifier via le formulaire dans le tableau $form_state et tu fait ton traitement si c’est des check box ke tu a coche tu aura true ou 1 je sai plus dans la case du tableau de formstae correspondand.
Tu vois ce que je veut dire.C’est quoi ki marche pas dans le tiens ??
MOMO Drupal en force
mbehmane
866
Alors, pour la création et le submit de mon form, aucun pb, pour le display non plus SAUF si le validate plante (pas de titre), auquel cas le form qui est affiché est celui qui était en cache sans les valeurs courantes que l’utilisateur vient d’entrer pour mes elements custom.
Dans ce cas, je passe bien dans mon _validate perso, mais les modifs que j’y fait ne sont pas répercutées dans drupal_render. C’est apparemment normal pour $form (c’est une copie qui n’est la que pour consultation, cf drupal_validate_form dans form.inc), mais les modifs de form_state[‘values’] sont ignorées aussi (et c’est là que je pige pas pourquoi).
dcaillibaud
21
ca me parrait bizarre j avai jamai fait attention a ca.Stock les toi meme dans une variable ke tu met en global.Meme si je l avoue c’est pas tres propre.J’avai pas bien compris au debut dsl
MOMO Drupal en force
mbehmane
866
Je vois pas trop comment mettre qqchose en global modifierait le comportement de drupal_render ?
Je crois avoir trouvé une soluce (pour être sûr j’ai pas mal de refactoring de code et de nettoyage (pour virer tous mes tests, les validates qui servent plus, tout tester dans chaque cas de figure, etc.).
Le problème :
la solution consisterait à mettre dans le code appelé en ajax, après le form_builder mais avant le set_cache un unset($form[‘mes_trucs_perso’][‘#after_build_done’]) ;
Ça règle mon pb car je peux modifier mes #value dans mon _after_build.
Sinon, pour recap les modifs de $form_state dans le _validate (sert à rien de modifier $form qui n’est pas récupéré) peuvent servir dans le _submit mais ne changent rien au rendu (qui prend $form et ignore $form_state), il faudrait utiliser un form_set_value dans le _validate.
dcaillibaud
21
en fait moi je croyai ke ton pb c’etait ke kan la validation echou tu perdais tes donner dans tes champ et la je parle ke des valu de tes champ en gros je croyai ke ca te vider ton formulaire
MOMO Drupal en force
mbehmane
866
Oui, c’était bien ça le pb, mais juste pour mes elements perso.
dcaillibaud
21
ta mis des default value dans chacun de tes champ de form ??
Sinon regarde ce ke lui il dit
http://drupalfr.org/forum/support/developpement/8985-afficher-les-valeur…
MOMO Drupal en force
mbehmane
866