2010-05-22 4 views
1

J'utilise Drupal 6.x. Dans mon propre module je modifie chaque forme de noeud d'ajouter mon propre gestionnaire de validation à l'aideDrupal FAPI: Ajouter des éléments de formulaire sur la forme de noeud après validation

$form['#validate'][] = 'my_own_validation_function'; 

Puis je la fonction

function my_own_validation_function($form, &$form_state) 
{ 
    //if validation fails, i would like to rebuild the form to add additional form elements in hook_form_alter 
    $form_state['rebuild'] = True; 
} 

Mon problème ist, que les fonctions de validation ne respecte pas mon ' rebuild '= True car le formulaire n'est jamais traité par hook_form_alter après validation. Mais j'ai besoin de hook_form_alter pour ajouter mon élément de formulaire supplémentaire.

Existe-t-il une solution à mon problème? Ou est-ce que les modifications form_state dans un propre gestionnaire de validation ne sont pas respectées même si j'ai défini & $ form_state comme un "pointeur"?

Merci et à bientôt.

Répondre

0

Etes-vous sûr que votre hook_form_alter n'est pas appelé à nouveau, ou vérifiez-vous simplement la propriété rebuild pour vrai là-bas? Votre approche est correcte - le réglage $form_state['rebuild'] = True lors de la validation devrait provoquer une reconstruction de formulaire. Mais normalement on fixerait un « pointeur » supplémentaire (par exemple $form_state['myModule_rebuild_indicator'] = TRUE et vérifier que hook_form_alter (la « reconstruction » propriété sera faux de nouveau à ce moment-là).

0

qui est la façon dont je pensais que je devrais travailler aussi Je sais que le drapeau de reconstruction ne sera pas défini dans hook_form_alter, mais mon problème est que hook_form_alter n'est plus appelé après la validation avec une erreur de validation Etes-vous sûr que cela fonctionne sur les formulaires CCK vrai ou seulement sur les formulaires créés par drupal_get_form?

1

ok maintenant je l'ai eu! Tout allait bien mais une erreur: dans mon propre gestionnaire de validation, j'ai mis form_set_error et s'il y a une erreur, et $ form_state ['rebuild'] = true, t La fonction drupal_get_form ne reconstruira pas le formulaire tant qu'il n'y aura pas d'erreur de formulaire. Je l'ai trouvé dans la forme.inc ligne 141

if ((!empty($form_state['storage']) || !empty($form_state['rebuild'])) && !empty($form_state['submitted']) && !form_get_errors()) { 
Questions connexes