Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

[gelöst] Formular, das die Ergebnisse auf der selben Seite anzeigt

Eingetragen von tdemuth (24)
am 16.08.2009 - 11:37 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

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

‹ Nodes ohne view-Berechtigung ausblenden Grundsätzliches: Eigenes Modul mit Bilderupload ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Schau dir drupal_goto an

Eingetragen von traxer (1009)
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_form die Funktion drupal_goto per call_user_func_array aufruft falls $form_state['redirect'] ein Array ist.

Du könntest natürlich auch die Session verwenden. Dazu muss dein Submit Handler

  1. eine ID erzeugen
  2. die empfangenen Daten oder die errechneten Daten unter Verwendung der ID in der Session speichern
  3. auf eine Seite weiterleiten, der die ID übergeben wird (natürlich nicht als Query String sondern als callback argument in hook_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.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

drupal_goto

Eingetragen von tdemuth (24)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok, ich habe es jetzt getestet

Eingetragen von tdemuth (24)
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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 20 Stunden
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 4 Tagen
  • In der entsprechenden View
    vor 3 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 4 Tagen
  • gelöst
    vor 6 Wochen 17 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20453

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 1 Benutzer und 22 Gäste online.

Benutzer online

  • wla

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association