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

  • gepatchte PHP Version 7.4 für Windows
  • Canvas Palette: Eine fertige Komponentenbibliothek für Drupal Canvas
  • Hilfe zu Updates oder Composer
  • Vergleich Drupal und Contao
  • [geloest] Blocks in Bootstrap nebeneinander darstellen und nicht untereinander
  • DrupalCamp Frankfurt 27-28 November 2026
  • Bitte mein Bentzerkonto löschen
  • Beim Aufruf einiger Inhalte erhalte ich folgende Fehlermeldung
  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
Weiter

Neue Kommentare

  • Muss ja nicht genau php 8.3 sein
    vor 4 Tagen 8 Stunden
  • Guten morgen und Danke
    vor 4 Tagen 15 Stunden
  • Evtl. versuchen auf PHP 8 zu wechseln
    vor 4 Tagen 21 Stunden
  • Danke Schmittrich. Die Frage
    vor 6 Tagen 13 Stunden
  • Keine Antwort auf die Frage nach dem Woher
    vor 6 Tagen 15 Stunden
  • Danke ich werde mir die
    vor 6 Wochen 4 Tagen
  • Vielen Dank für Ihren
    vor 7 Wochen 2 Stunden
  • Composer ist sehr ratsam
    vor 7 Wochen 2 Tagen
  • Vielen Dank für den
    vor 7 Wochen 4 Tagen
  • Die alten CMS Vergleiche von contentmanager.de
    vor 7 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250323
Registrierte User: 20572

Neue User:

  • alxshell
  • AnthonyhoF
  • Philiphelve

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 16 Gäste online.

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