Est-il possible de mettre plusieurs formulaires sur une seule page?
J'essaie de créer une page d'offre de coupons. Je voulais avoir deux formulaires pour deux offres différentes de chaque côté d'une page. Chaque formulaire a un champ de texte pour le code promo et son propre bouton d'envoi. Le premier formulaire fonctionne bien; cependant, les valeurs cachées du second formulaire semblent être remplacées par celles du premier formulaire.
J'utilise hook_alter pour modifier le second formulaire pour le rendre différent, mais il a toujours le même form_id que le premier. Est-ce la cause de mes problèmes ou dois-je chercher / penser ailleurs?
Les deux formulaires ont les mêmes valeurs pour "form_id" et "form_token", mais des valeurs différentes pour "form_build_id".
hook_forms()
ne résout pas automatiquement cela. Si vous utilisez simplement le même formulaire deux fois sur la même page, vous avez toujours le problème d'avoir le même champ de formulaire répété deux fois.hook_forms()
n'est pas utilisé pour avoir deux formulaires avec les mêmes champs de formulaire dans la même page; il est utilisé pour permettre d'avoir un seul générateur de formulaire pour différents ID de formulaire.hook_forms()
. L'OP modifie alors l'une des deux formes.Vous pouvez avoir plusieurs formulaires sur la même page; voir ce que fait node_admin_content () , qui utilise le code suivant:
En laissant de côté la première instruction IF, la fonction ajoute deux formulaires différents qui ont leurs propres gestionnaires de soumission.
Le problème vient des champs de formulaire qui sont répétés deux fois. La structure de tableau suivante créerait des problèmes lorsque le tableau de formulaires est aplati, car il y aurait deux champs "coupon".
Sans voir le code utilisé, je pourrais penser que l'utilisation d'un rappel de page qui appelle drupal_get_form () est probablement le moyen le plus simple, dans votre cas.
J'ai essayé d'utiliser le code suivant dans Drupal 6.
Le contenu de
$output
pour les deux formulaires était le suivant (j'ai supprimé la sortie pour les champs de formulaire unique).Il n'y a pas de conflit entre l'ID HTML affecté au même champ de formulaire et la valeur de "form_build_id" (ou "form_token") est différente dans les deux formulaires.
L'implémentation de
hook_form_alter()
utilisé pour modifier le formulaire devrait être en mesure de comprendre dans quel cas modifier le formulaire, ou les deux formulaires afficheraient les mêmes champs.Du point de vue de l'expérience utilisateur, je ne suis pas sûr que l'affichage de deux formulaires différents avec leurs propres boutons de soumission soit la meilleure façon de faire ce que vous essayez d'atteindre.
Je pense qu'il serait préférable d'utiliser un formulaire qui montre différents champs sur la base des valeurs définies pour d'autres champs. Par exemple, le formulaire pourrait avoir un sélecteur pour le type de coupon et afficherait différents champs de formulaire en fonction du type de coupon sélectionné.
la source