[gelöst] Formular, das die Ergebnisse auf der selben Seite anzeigt
am 16.08.2009 - 11:37 Uhr in
Hi,
ich habe ein kleines Formular, mit dem eine Liste von Nodes nach bestimmten Kriterien gefiltert werden kann. Die gefilterte Liste soll unter dem "Filterformular" angezeigt werden, damit der Benutzer schnell andere Filtereinstellungen wählen kann, wenn ihm das Ergebnis nicht passt. Ich hatte ursprünglich gedacht, dass ich das Formular einfach auf den eigenen Pfad umleite und dabei die Ids der Ergebnisnodes übergebe - aber wie?
Ich habe die Funktionen
- my_page, die die Seite mit dem Formular, bzw Formular und Ergebnisse rendern soll;
- my_page_form, die das Formular erstellt;
- my_page_form_validate, die ein bißchen validiert;
- my_page_form_submit, die die Ergebnisliste berechnet.
In my_page_form_submit habe ich $form_state['redirect'] = array('my/page', array('nodes => '1,2,3,4')) geschrieben, weil ich gesehen habe, das man das in der Formulardefinition wohl darf, um Parameter per GET zu übergeben. In Form-State darf man es anscheinend nicht, es passiert nämlich nix.
Wie also gehe ich diese Sache an?
mpG
Tobias
- Anmelden oder Registrieren um Kommentare zu schreiben

Schau dir drupal_goto an
am 16.08.2009 - 21:14 Uhr
Du musst die Parameter, die an
drupal_gotoübergeben werden sollen, in ein Array packen und an$form_state['redirect']zuweisen:<?php$form_state['redirect'] = array(
// Parameter $path:
'my/page',
// Parameter $query:
urlencode('nodes=1,2,3,4,5'),
);
?>
Das ganze funktioniert, weil
drupal_redirect_formdie Funktiondrupal_gotopercall_user_func_arrayaufruft falls$form_state['redirect']ein Array ist.Du könntest natürlich auch die Session verwenden. Dazu muss dein Submit Handler
callback argumentinhook_menu()).Besagte Seite könnte sich dann anhand der ID die gesendeten Daten bzw die errechneten Daten aus der Session holen und die Liste zusammenbauen.
--

drupal_goto
am 16.08.2009 - 20:49 Uhr
drupal_goto habe ich mir schon angesehen, daher rührte ja die Idee, dass ich ein Array übergeben könnte. Ich kann es gerade nicht testen, aber wahrscheinlich habe ich was anderes verkehrt gemacht ... Aber die Session zu benutzen ist sowieso ein cleverer Plan als GET, gerade, weil die Ergebnisliste sehr groß werden kann.
Vielen Dank,
Tobias
Ok, ich habe es jetzt getestet
am 17.08.2009 - 13:03 Uhr
Ok, ich habe es jetzt testen können. Wichtig sind folgende Dinge:
1. Die Formulardefinition und der Formularzustand, der an die Submit-Funktion übergeben wird, muß als Referenz übergeben werden. (Eigentlich logisch, kann man aber leicht übersehen.)
2. Man kann GET-Parameter mit $form_state['redirect'] = array($path, urlencode("parametername=parameterwert"); übergeben. Die andere Möglichkeit von drupal_goto(), den zweiten Wert als ein Array ("parametername" => "parameterwert") zu übergeben, habe ich bislang nicht ans laufen gekriegt.
3. Ausgaben während der Formularverarbeitung (etwa zu Testzwecken) stören den normalen Programmablauf und führen mitunter zu merkwürdigen, nicht direkt als Fehler erkennbaren Problemen.