Form API Aufbau-Frage
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 25.10.2007 - 08:08 Uhr in
Hallo!
Ich bin noch nicht so lange dabei und stoße momentan schon etwas länger an einem Form-Problem. Mich würde interessieren, ob ich da grundsätzliche Verständis-Probleme habe.
Über die Menüstruktur rufe ich per Callback drupal_get_form und per Callback arguments die entsprechende Funktion auf. In dieser Funktion erstelle ich ein Array für das Formular und gebe es mit return system_settings_form($form) aus. Soweit kein Problem!
In dieser Funktion rufe ich jetzt aber noch eine andere Funktion auf, diese soll auch Formelemente generieren. Das Formular Array in dieser "Unter-"Funktion übergebe ich dann an drupal_render_form() und gebe es danach mit return aus.
function () {
form ...
return weitere_form_function()
form ...
return form
}
Das Formular der zweiten Funktion wird zwar angezeigt, aber nicht von Drupal in das $form_values Array gepackt, dh. ich hole die Daten momenten direkt per _POST ab, und dasss ist blöd :-)
Wenn mir jemand einen Tipp geben könnte, würde ich mich sehr freuen!
- Anmelden oder Registrieren um Kommentare zu schreiben
checker@drupal.org
am 04.12.2007 - 00:07 Uhr
Das Formular Array in dieser "Unter-"Funktion übergebe ich dann an drupal_render_form() und gebe es danach mit return aus.
Mach das nicht. Aus dem Forms API Quickstart Guide: Faking a POST is much harder since it won't let values that weren't actually on the form come through to the $form_values in your submit function [...]
Auf deutsch ungefähr: Einen HTTP-POST zu manipulieren ist viel schwieriger, da sie [die Forms API; Anm.d.Ü.] Werte, die nicht im Forms API Array auftauchten, nicht im $form_values Array bis zur submit-Funktion durchreicht.
Wenn mir jemand einen Tipp geben könnte, würde ich mich sehr freuen!
weitere_form_function()
sollte ein Forms API Array liefern. Desweiteren hast du in deiner Funktion zwei return-Anweisungen. Davon wird natürlich nur eine ausgeführt. Hast du da Verzweigungen in der Funktion? Irgendwie ist mir nicht ganz klar was du vorhast.Zitat: Desweiteren hast du
am 04.12.2007 - 01:45 Uhr
Desweiteren hast du in deiner Funktion zwei return-Anweisungen. Davon wird natürlich nur eine ausgeführt.
Eigentlich immer nur die Erste von Beiden.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Drupal erzeugt zu Beginn des
am 04.12.2007 - 08:26 Uhr
Drupal erzeugt zu Beginn des Formularprozesses (drupal_get_form()) ein eindeutiges Token, um sicherzustellen, dass auch wirklich nur das Formular ausgeführt wird, was auch von Drupal erzeugt wurde. Daher kann deine Lösung nicht funktionieren.
Auch wenn ich dein Problem nicht ganz verstehe. Aber wenn du das erzeugen der Formularfelder auslagern willst, dann versuch es doch einfach mal über das "normale" Erweitern des $form-Arrays.
<?php
$form['generiertesfeld'] = function xy();
function xy ()
return array('#type' => 'textfield', '#value' => 'hallo welt');
?>
Habe es nicht ausprobiert. Scheint mir aber plausibel.
Sollte das nicht gehen, kannst du immer noch mit #pre_render/#after_build -Funktionen und natürlich hook_form-alter in den Formularprozess eingreifen.