Ist es möglich, mehrere Formulare auf einer Seite zu platzieren?
Ich versuche, eine Coupon-Angebotsseite zu erstellen. Ich wollte zwei Formulare für zwei verschiedene Angebote auf jeder Seite einer Seite haben. Jedes Formular verfügt über ein Textfeld für den Gutscheincode und eine eigene Schaltfläche zum Senden. Die erste Form funktioniert in Ordnung; Die verborgenen Werte des zweiten Formulars scheinen jedoch von den Werten des ersten Formulars überschrieben zu werden.
Ich verwende hook_alter, um das zweite Formular zu ändern, um es anders zu machen, aber es hat immer noch die gleiche form_id wie das erste. Verursacht dies meine Probleme oder muss ich woanders suchen / denken?
Die beiden Formulare haben dieselben Werte für "form_id" und "form_token", jedoch unterschiedliche Werte für "form_build_id".
hook_forms()
löst dies nicht automatisch. Wenn Sie dasselbe Formular einfach zweimal auf derselben Seite verwenden, besteht immer noch das Problem, dass dasselbe Formularfeld zweimal wiederholt wird.hook_forms()
wird nicht verwendet, um zwei Formulare mit denselben Formularfeldern auf derselben Seite zu haben. Es wird verwendet, um einen einzelnen Formularersteller für verschiedene Formular-IDs zu ermöglichen.hook_forms()
. Das OP ändert dann eine der beiden Formen.Sie können mehr als ein Formular auf derselben Seite haben. Sehen Sie, was mit node_admin_content () gemacht wird , das den folgenden Code verwendet:
Ohne die erste IF-Anweisung fügt die Funktion zwei verschiedene Formulare hinzu, die über eigene Übermittlungshandler verfügen.
Das Problem liegt in den Formularfeldern, die zweimal wiederholt werden. Die folgende Array-Struktur würde Probleme verursachen, wenn das Formular-Array abgeflacht wird, da zwei "Coupon" -Felder vorhanden wären.
Ohne den verwendeten Code zu sehen, könnte ich denken, dass die Verwendung eines Seitenrückrufs, der drupal_get_form () aufruft, in Ihrem Fall wahrscheinlich der einfachere Weg ist.
Ich habe versucht, den folgenden Code in Drupal 6 zu verwenden.
Der Inhalt
$output
für die beiden Formulare war der folgende (ich habe die Ausgabe für die einzelnen Formularfelder entfernt).Es besteht kein Konflikt zwischen der HTML-ID, die demselben Formularfeld zugewiesen ist, und der Wert für "form_build_id" (oder "form_token") unterscheidet sich in beiden Formularen.
Die Implementierung von
hook_form_alter()
verwendet, um das Formular zu ändern, sollte verstehen können, in welchem Fall das Formular geändert werden muss, da sonst beide Formulare dieselben Felder anzeigen würden.Aus Sicht der Benutzererfahrung bin ich mir nicht sicher, ob das Anzeigen von zwei verschiedenen Formularen mit eigenen Übermittlungsschaltflächen der beste Weg ist, um das zu tun, was Sie erreichen möchten.
Ich würde denken, dass es besser wäre, ein Formular zu verwenden, das verschiedene Felder basierend auf den für andere Felder festgelegten Werten anzeigt. Das Formular könnte beispielsweise einen Selektor für den Coupontyp haben und verschiedene Formularfelder anzeigen, die auf dem ausgewählten Coupontyp basieren.
quelle