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

[gelöst] Parameter für eigene Modulseite

Eingetragen von MaWe4585 (41)
am 29.12.2009 - 17:51 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hallo,

ich möchte eine Seite meines Moduls mit Parametern aufrufen, soll so aussehen:

http://drupal.meineseite.de/seite/param1/param2

Nun weis ich das ich mit der Methode arg() diese Parameter auslesen kann, aber wie kann ich die mit einem Formular erzeugen?

Wenn man http://drupal.meineseite.de/seite/ aufruft, kommt ein Formular auf welchem man param1 und param2 auswählen kann. Aber was muss in das Formular rein damit diese auch in der URL drin sind?

<?php

function param_all() {
   
$param1 = arg(1);
   
$page_content = '';
    if(
is_numeric($param1)){
       
$page_content .= t('This is the site of param1');
    }else{
       
$page_content .= drupal_get_form('choose_param_form');

    }
    return
$page_content;
}

function
choose_param_form($form_state){
   
// Description
   
$query =  "SELECT * FROM {mytable} ";
   
$qRes = db_query($query);
   
$paramoptions = array();
    while(
$param1 = db_fetch_object($qRes)) {
       
$paramoptions["$param1->param_id"] = $param1->param_name;
    }
   
$form['param1'] = array(
           
'#type' => 'select',
           
'#title' => t('Select Param1'),
           
'#default_value' => $node->selectbox,
           
'#options' => $paramoptions,
           
'#description' => t('Please choose Param1.'),
    );

   
$form['submit'] = array('#type' => 'submit', '#value' => t('Submit'));
    return
$form;
}


?>

Was muss ich hier ergänzen/anders machen?

edit: Wie sieht die url ohne mod-rewrite dann aus? Bzw ändert sich was an der Auswertung?

‹ Blankes Formular [gelöst]Titel von automatisch erstellten Nodes immer leer ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Weis keiner wie das geht

Eingetragen von MaWe4585 (41)
am 31.12.2009 - 09:39 Uhr

Weis keiner wie das geht oder hab ich das undeutlich beschrieben?
Oder sind grad alle im Urlaub? :(

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: Parameter für eigene Modulseite

Eingetragen von traxer (1009)
am 01.01.2010 - 15:13 Uhr
MaWe4585 schrieb

Nun weis ich das ich mit der Methode arg() diese Parameter auslesen kann, ...

Solltest du aber nur in Notfällen machen. Normalerweise solltest du in deiner Implementierung von hook_menu angeben, welche Teile des Drupal-Pfades an den Page Callback übergeben werden und im Page Callback auf die Argumente der Funktion zugreifen. Teile des Drupal-Pfades, die über das hinausgehen, was im Menüeintrag festgelegt ist, werden automatisch als Argumente an den Page Callback übergeben. Zum Experimentieren:

<?php

function mymodule_menu() {
  return array(
   
'mymodule/%/page' => array(
     
'page callback' => 'mymodule_page',
     
'page arguments' => array(1),
     
'access arguments' => array('access content'),
    ),
  );
}

function
mymodule_page($arg1) {
 
$args = func_get_args();
 
$args_php = var_export($args, true);
  return
'<pre>' . highlight_string("<?php\n" . $args_php, true) . '</pre>';
}
?>

Schau mal was passiert wenn du index.php?q=mymodule/foo/page/bar/baz aufrufst.

MaWe4585 schrieb

Wenn man http://drupal.meineseite.de/seite/ aufruft, kommt ein Formular auf welchem man param1 und param2 auswählen kann. Aber was muss in das Formular rein damit diese auch in der URL drin sind?

Ich versteh's nicht. Wenn man http://drupal.meineseite.de/seite/ aufruft, dann sind param1 und param2 nie in der URL drin. Damit param1 und param2 in der URL sind müsste man eine andere URL aufrufen, z.B. http://drupal.meineseite.de/seite/param1 oder http://drupal.meineseite.de/seite/param2.

Bitte erzähle mal in chronologischer Reihenfolge aus Sicht des Benutzers was du umsetzen willst.

MaWe4585 schrieb

edit: Wie sieht die url ohne mod-rewrite dann aus?

Genau so wie mit mod_rewrite. mod rewrite hat keinen Einfluss auf das Aussehen von URLs. mod_rewrite ändert lediglich die Art wie Anfragen von Apache behandelt werden. Das Aussehen von URLs wird durch die Konfigurationseinstellung Clean URLs bestimmt.

MaWe4585 schrieb

Bzw ändert sich was an der Auswertung?

Für Drupal-Module ändert sich nichts durch Clean URLs und auch nichts durch mod_rewrite.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

OK, also ich programmiere

Eingetragen von MaWe4585 (41)
am 01.01.2010 - 18:28 Uhr

OK, also ich programmiere ein Browsergame welches auf nem cms basiert, bisher wollt ich ein anderes cms als Drupal verwenden, arbeite mich jetzt aber in Drupal ein um zu schauen ob das besser ist.

Das Spiel wird ein Fussballmanager(ja ich weis, etwa der Millionste, ich machs trotzdem ;) )
Nun lässt sich ein Spieler seine aktuelle Liga anzeigen:
http://drupal.meineseite.de/liga/

Damit andere von aussen seine Liga sehen können, muss er einen Link mit Parametern rausgeben, deswegen brauch ich:
http://drupal.meineseite.de/liga/land_id/liga_index[/spieltag]

Wenn spieltag mitangegeben wird, wird die Tabelle dieses Spieltags angezeigt, ansonsten der aktuelle.

Um nun im Ligabildschirm zu einer anderen Liga wechseln zu können, möchte ich oberhalb davon ein Formular mit 3 select-boxen machen über die man land, liga und spieltag auswählen kann.
Bei Klick auf den Submit-button soll eben die gewählte Liga ausgewählt werden und in der Adresszeile eben das stehen:
http://drupal.meineseite.de/liga/land_id/liga_index[/spieltag]

Ein problem ist aber: die Formulare senden per POST, in der Adresszeile steht also nur
http://drupal.meineseite.de/liga/

  • Anmelden oder Registrieren um Kommentare zu schreiben

Da wirst Du wohl mit ein

Eingetragen von wla (9461)
am 01.01.2010 - 18:45 Uhr

Da wirst Du wohl mit ein paar Zeilen JavaScript oder besser jQuery im Browser die Aktion des Formulars umbiegen müssen. Ich wüßte jedenfalls nicht wie das anders gehen sollte, da der Server von der Auswahl des Users nicht mitbekommt.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie meinst der Server

Eingetragen von MaWe4585 (41)
am 01.01.2010 - 18:49 Uhr

Wie meinst der Server bekommt nix mit? Es wird doch zum Server gesendet, ich kann ja das $_POST auswerten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: OK, also ich programmiere

Eingetragen von traxer (1009)
am 01.01.2010 - 21:22 Uhr
MaWe4585 schrieb

Bei Klick auf den Submit-button soll eben die gewählte Liga ausgewählt werden und in der Adresszeile eben das stehen:
http://drupal.meineseite.de/liga/land_id/liga_index[/spieltag]

Wenn du eine Formulardefinition in Drupal hast, dann brauchst du noch einen Submit Handler:

<?php
/**
* Submit-Handler für das Formular choose_param_form.
*
* @param array $form Das Formular
* @param array $form_state Zustand des Formulares
*  inklusive der Werte die der Benutzer eingetragen
*  hat.
*/
function choose_param_form_submit($form, &$form_state) {
 
// TODO: In $form_state['values'] nachschauen,
  //       was der Benutzer eingetragen hat
  // TODO: In $form_state['redirect'] den Drupal-Pfad
  //       der Seite eintragen, auf die weitergeleitet
  //       werden soll.
}
?>

Der Submit Handler wird automatisch von drupal_get_form aufgerufen, allerdings nur dann, wenn der Benutzer das Formular auch tatsächlich ausgefüllt und abgeschickt hat. Du brauchst dich darum also nicht kümmern, du musst den Submit Handler lediglich bereitstellen und drupal_get_form aufrufen.

In deinem Fall besteht die Formularverarbeitung wohl nur daraus, anhand der Werte den richtigen Drupal-Pfad zusammenzubauen und das Ergebniss an $form_state['redirect'] zuzuweisen um die Weiterleitung dorthin anzustoßen.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich seh schon, da wartet

Eingetragen von MaWe4585 (41)
am 01.01.2010 - 22:20 Uhr

Ich seh schon, da wartet noch ne Menge arbeit auf mich und ne Menge Funktionen und hooks die ich kennenlernen muss :D

habs jetz so gelöst:

<?php

function choose_param_form_submit($form, &$form_state) {
 
drupal_goto('league/'.$form_state['values']['param1'].'/'.$form_state['values']['param2']);
}


?>

was hat es eigentlich mit dem & vor dem $form_state auf sich? Heisst das, dass es nur ein Zeiger ist?

Danke für eure Hilfe, Thema gelöst

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, es ist nur ein Zeiger

Eingetragen von wla (9461)
am 01.01.2010 - 23:53 Uhr

Ja, es ist nur ein Zeiger und erlaubt, daß wenn im Unterprogramm der Wert der Variablen geändert wird, der auch im rufenden Programm geändert ist. Die Stichworte hier sind "call by value" und "call by reference". Solltest Du mal nach googeln.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: Ich seh schon, da wartet

Eingetragen von traxer (1009)
am 02.01.2010 - 10:56 Uhr
MaWe4585 schrieb

<?php

function choose_param_form_submit($form, &$form_state) {
 
drupal_goto('league/'.$form_state['values']['param1'].'/'.$form_state['values']['param2']);
}
?>

Besser:

<?php

function choose_param_form_submit($form, &$form_state) {
 
$form_state['redirect'] = 'league/'.$form_state['values']['param1'].'/'.$form_state['values']['param2'];
}
?>

Probleme deiner Lösung:

  1. Formulare können durch Implementierung von hook_form_alter verändert werden. Wenn ein Modul das macht, dann trägt es oft auch einen zusätzlichen Submit-Handler ein, der dann z.B. zusätzliche Eingabefelder auswertet. Durch drupal_goto wird allerdings sofort weitergeleitet, ohne das weitere Submit-Handler ausgeführt werden. drupal_get_form schaut selbst nach, was in $form_state['redirect'] eingetragen wurde und leitet dorthin weiter (das geht natürlich nur, weil $form_state per Referenz übergeben wird).
  2. Mit drupal_execute können Formulare programmatisch (ohne Benutzerinteraktion) ausgefüllt und abgesendet werden. In diesem Fall soll überhaupt nicht weitergeleitet werden, da nach Beendigung von drupal_execute wahrscheinlich weitere Anweisungen ausgeführt werden sollen.
MaWe4585 schrieb

was hat es eigentlich mit dem & vor dem $form_state auf sich? Heisst das, dass es nur ein Zeiger ist?

Ein Zeiger im eigentlichen Sinne ist es nicht. Es verhällt sich aber in vielen Aspekten so wie einer. In PHP heißen diese Dinger Referenz.

--
XING

  • 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 7 Stunden
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 1 Tag
  • 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 3 Tagen
  • In der entsprechenden View
    vor 3 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 3 Tagen
  • gelöst
    vor 6 Wochen 4 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 0 User und 29 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