Daten des Formulars auf der selben Seite anzeigen
Eingetragen von axelf (110)
am 30.11.2009 - 17:34 Uhr in
am 30.11.2009 - 17:34 Uhr in
Hi,
Ich möchte die abgeschickten Daten aus dem Formular auf der selben Seite wieder anzeigen, d.h. im Template mymodule_results.tpl.php soll mir der Inhalt des Formulars angezeigt werden.
Wie kann ich nun in mymodule_page unterscheiden, ob das Formular abgeschickt wurde oder nicht und wie bekomme ich dann die Daten dort hinein?
in meinem Modul gibt es diese u.a. diese Funktionen:
function mymodule_page($form){
$output = theme('mymodule', 'test');
$output .= theme('mymodule_results', 'test');
return $output;
}
/**
* Implementation of hook_theme
*/
function mymodule_theme(){
return array(
'mymodule' => array(
'template' => 'mymodule',
'arguments' => array('dbData' => NULL, 'results' => NULL),
),
'mymodule_results' => array(
'template' => 'mymodule_results',
'arguments' => array('results' => NULL),
),
);
}
function mymodule_form(){
// Formular
}
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich habe jetzt mal folgende
am 30.11.2009 - 18:00 Uhr
Ich habe jetzt mal folgende Lösung. Wenn jemand noch was besseres kennt dann immer her damit.
function mymodule_form(){
if (!empty($form_state['post'])){
$results = 'Anzeige der Ergebnisse';
}else{
$results = 'Formular noch nicht abgeschickt';
}
$form['results'] = array(
'#type' => 'item',
'#value' => theme('mymodule_results', $results),
);
}
dafür habe ich in der mymodule_page den aufruf von $output .= theme('mymodule_results', 'test'); enfternt und noch eine zusätzliche preprocess funktion für das zweite template eingebaut.
Ich mache für so etwas eine
am 30.11.2009 - 19:45 Uhr
Ich mache für so etwas eine eigene Submit Funktion, die ich an den Submit Button hänge.
$form['edit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#submit' => array('myform_submit'),
)
In dieser Funktion setze ich dann:
$form_state['rebuild'] = TRUE;
Dann wird nach der Submit-Funktion wieder die Form-aufbauende Funktion aufgerufen. Dort kann ich dann mit den gesendeten Daten eine geänderte Form aufbauen. Das kann man solange treiben, bis entweder über einen weiteren Button oder ein Abruchkriterium diese Form endgültig verlassen wird.
Beste Grüße
Werner
Hi, danke für den Tip.
am 01.12.2009 - 10:21 Uhr
Hi,
danke für den Tip. Funktioniert es bei dir auch, das du unter dem Formular die Daten anzeigst? Mir ist nich ganz klar was du meist "mit den gesendeten Daten eine geänderte Forn aufbauen". Das Formular ansich bleibt ja unverändert.
Ich habe bei mir ein extra Template angelegt, das unter dem Formular die gesendeten Daten anzeigen soll (später kommt dann noch eine DB-Abfrage hinzu)
Wenn ich eine Form mittels
am 01.12.2009 - 11:09 Uhr
Wenn ich eine Form mittels PHP selbst aufbaue, bestimme ich doch in der Funktion, die diese Form erzeugt, wie es aussehen soll. Dann kann ich auch nicht nur die Input-Felder sondern auch Formelemente vom Typ HTML ausgeben (= einfachen Text). Du kannst die Resultate der Eingabe in der Variablen $form_state['values'] finden und in $form_state['storage'] kannst Du Werte zwischen Deiner Submit-Funktion und der Formerzeugung hin und her schieben. Ob Du nun die Textfelder über oder unter den Eingabefeldern zeigts liegt doch vollkommen bei Dir. Allerdings ist das dann alles PHP-Programmierung.
Beste Grüße
Werner
Hi, wie erstelle ich denn
am 01.12.2009 - 16:14 Uhr
Hi,
wie erstelle ich denn ein Formularelement vom Typ HTML? Meinst du '#markup'?
Bei mir ist $form_state['storage'] immer leer.
Sorry, hatte es nicht
am 01.12.2009 - 16:34 Uhr
Sorry, hatte es nicht nachgesehen, ja, der Typ ist markup. Klar ist $form_state['storage'] leer, aber da kannst Du eigene Information reinpacken (ich habe da mal ne Liste von Nodes geparkt). Wichtig ist, daß dieses Element erhalten bleibt zwischen den einzelnen Funktions-Aufrufen und Du in der Submit-Funktion diese Infos somit nutzen kannst. Das mußt Du einfach probieren.
Beste Grüße
Werner
Hi, dein Tip klappt sehr
am 02.12.2009 - 15:45 Uhr
Hi,
dein Tip klappt sehr gut, nur habe ich festgestellt, dass nach dem rebuild die Werte nicht beibehalten werden (z.b. bei mir wird die Selectbox wieder zurückkesetzt). Mit meiner Methode bleiben die ausgewählten Werte auch nach dem abschicken automatisch erhalten
Dann mußt Du für die
am 02.12.2009 - 16:13 Uhr
Dann mußt Du für die Selectbox den default richtig setzen sprich auf $form_state['values']['name deiner box']. Sieh Dir mal die Struktur von $form_state an. Ich habe für solche Zwecke eine kleine Funktion, die mir die Werte in eine Datei schreibt. Dann kann ich das in Ruhe auswerten.
function wla_logging($text) {
$fp = fopen("/tmp/wla_log", "a+");
chmod ("/tmp/wla_log", 0777); // importand to read and clean with an editor
fputs($fp, $text, strlen($text));
fclose($fp);
}
die rufe ich dann auf mit
wla_logging("Form State Array :\n" . print_r($form_state, true));
Damit habe ich die Info unter /tmp in der Datei wla_log. Das geht auch mit <pre> print_r... </pre> aber ich habe das lieber in einer Datei. Ist halt persönliche Note :-).
Beste Grüße
Werner
Hi, jetzt ist doch noch ne
am 04.12.2009 - 17:32 Uhr
Hi,
jetzt ist doch noch ne Frage aufgetaucht. Ich erzeuge per Ajax ein Dropdown, d.h. ich wähle im ersten etwas aus und im zweiten Dropdown dann die dazugehörigen Werte.
Wenn ich das Formular abgeschickt habe, dann kommt immmer eine Meldung "Es wurde eine nicht erlaubte Auswahl entdeckt" und das Dropdown ist leer, obwohl ich schaue
if (!empty($form_state['values']))
und dann das Dropdown fülle. Irgendwie verliere ich zwischendurch die Daten, die ich vorher mit ajax erzeugt habe. Du hattest ja was von $form_state['storage'] geschrieben. Wie bekomme ich denn die Werte dort rein? Evtl. klappts ja dann. Läuft das über die _submit funktion?