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

[gelöst] Funktionsaufruf nach Submit

Eingetragen von crazybread (4)
am 04.03.2011 - 23:00 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Guten Abend zusammen,
ich google mich schon eine Weile durchs Netz, habe mich auch schon hier im Forum umgesehen und finde keine Lösung, darum mache ich ein neues Thema auf, in der Hoffnung, mir werde geholfen!

Ich schreibe an einem Formular, welches (später) mehrere Eingabefelder für Geburtsjahr, Geschlecht, Hobbies usw haben wird. Nach Drücken des Submit-Buttons werden diese Daten mit allen registrierten Usern verglichen und passende ausgegeben, also sozusagen eine erweiterte Usersuche. HIer einmal der Code:

<?php
// $Id$

/**
* Baut das Menu neu auf (nur während der Entwicklungsphase)
*/
function usersuche_init(){
   
menu_rebuild();
}

/**
* Erstellt Menüeinträge
*/
function usersuche_menu() {

   
$items['usersuche'] = array(
   
'title' => 'UserSuche',
   
'page callback' => 'usersuche_formular',
   
'access arguments' => array('access user profiles'),
   
'type' => MENU_NORMAL_ITEM);
   
    return
$items;
}
// END usersuche_menu
?>


<?php
/**
* Gibt das Formular aus
*/
function usersuche_formular(){
   
$uebergabe = t('Suche nach Benutzern');
   
$uebergabe .= drupal_get_form('formular');

    return
$uebergabe;
}
// END usersuche_formular()
?>


<?php
/**
* Hier wird das Formular angelegt
*/
function formular()
{
   
$form = array();

   
$form['Vorname'] = array
    (
   
'#title' => t('Vorname'),
   
'#type' => 'textfield',
   
'#description' => t('Hier gib bitte den Vornamen ein')
    );
   
   
$form['submit'] = array
    (
   
'#type' => 'submit',
   
'#value' => t('Senden')
    );

    return
$form;
}
// END formular()
?>


<?php
/**
* Das kommt jetzt nach erfolgreicher Validierung
*/
function usersuche_submit($form, &$form_state)
{
    return
'usersuche_ergebnis';
}
// END usersuche_submit()
?>


<?php
/**
* Generiert die Ergebnis - Seite
* @param op the operation from the URL
* @param delta offset
* @returns block HTML
*/
function usersuche_ergebnis() {

   
//Inhalt der Seite, die nachher zurückgegeben wird
   
$page_content = '';
   
$query = "SELECT uid, name FROM {users}";


   
$queryResult =  db_query($query);
    while (
$links = db_fetch_object($queryResult)) {
       
$page_content .= l($links->name, 'user/'.$links->uid) . '<br />';
    }

    return
$page_content;
}
// END usersuche_ergebnis()
?>

Wie man sieht, sollte nach erfolgreichem Drücken des Submit-Buttons die Funktion "usersuche_ergebnis" aufgerufen werden... tuts aber nicht.
Was mache ich falsch? Ist meine Vorgehendweise eventuell nicht richtig und man macht so etwas auf eine andere Art?

Vielen Dank schonmal!

‹ Eigene tpl Dateien im eigenen PlugIn verwenden Registrierungsmodul erstellen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Warum verwendest du nicht

Eingetragen von Tobias Bähr (4019)
am 04.03.2011 - 23:44 Uhr

Warum verwendest du nicht Views? Die Submit-Funktion muss formular_submit heißen. Und return 'usersuche_ergebnis'; ist ein String. return usersuche_ergebnis();. Allerdings ist auch falsch. Diese Ausgabe muss in der Funktion usersuche_formular() untergebracht werden.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Auch eine Idee

Eingetragen von crazybread (4)
am 04.03.2011 - 23:51 Uhr

Das wäre auch eine Idee gewesen, ich dachte aber durch das Schreiben eines Moduls lerne ich das Modulprogrammieren für Drupal eher.
Danke für deine Tips, werde das baldmöglichst ausprobieren.

Wenn ich die Ausgabe in usersuche_formular() packen muss, wie lautet dann die if Anweisung? Ich muss ja irgendwie checken, ob der Submitbutton schon gedrückt wurde?

  • Anmelden oder Registrieren um Kommentare zu schreiben

In diesem Fall macht man es

Eingetragen von Tobias Bähr (4019)
am 06.03.2011 - 13:13 Uhr

In diesem Fall macht man es so wie die Core-Suche. Man hängt das Gesuchte an die URL, diese kann man dann ja abfragen im Page-Callback.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Modul erstellen

Eingetragen von stBorchert (6003)
am 06.03.2011 - 13:48 Uhr

Hallo.

crazybread schrieb

Das wäre auch eine Idee gewesen, ich dachte aber durch das Schreiben eines Moduls lerne ich das Modulprogrammieren für Drupal eher.

Ja, das ist prinzipiell auch richtig. Allerdings solltest Du Dir dann gleich die (Coding-)Standards einverleiben und diese dann auch verwenden.
<?php t('Suche nach Benutzern'); ?> ist beispielsweise nicht nur gruselig, sondern auch noch schlichtweg falsch. Texte in der [api:t:6]-Funktion werden generell auf englisch geschrieben. Ansonsten sind sie nicht übersetzbar.

Zum Thema Modulentwicklung gibt es diverse Handbücher. Zum Beispiel http://www.drupalcenter.de/handbuch/15747

nichtsdestotrotz viel Spass weiterhin beim Programmieren,

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Aber wie?

Eingetragen von crazybread (4)
am 07.03.2011 - 10:00 Uhr
Tobias Bähr schrieb

In diesem Fall macht man es so wie die Core-Suche. Man hängt das Gesuchte an die URL, diese kann man dann ja abfragen im Page-Callback.

Hmm, ich hab jetzt probiert und gemacht, vermutlich verstehe ich noch nicht genau die Arbeitsweise... Was genau passiert denn, wenn ich den Submitbutton drücke? Wird die selbe Funktion (in diesem Fall usersuche_formular()) nochmals aufgeerufen? Und wie hänge ich dann die Ergebnisse an die URL?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die Lösung scheint in Sicht...

Eingetragen von crazybread (4)
am 07.03.2011 - 12:26 Uhr

So, ich habe nun eine Lösung gefunden und die möchte ich natürlich nicht für mich behalten ;)
Ich habe es nun wie folgt gelöst:

Durch das Hinzufügen von


$items['usersuche_ergebnis'] = array(
    'title'            => 'Mitgliederliste',
    'page callback'    => 'usersuche_ergebnis',
    'access arguments' => array('access user profiles'),
    'type'             => MENU_CALLBACK
);

im usersuche_menu() und

$form['#action'] = 'usersuche_ergebnis';

bei der Erstellung des Formulars komme ich nun nach Klicken des Submit-Buttons in die gleichnamige Funktion
usersuche_ergebnis()
und kann dort die eingegebenen Formulardaten mittels Abfrage von $_POST herausziehen und weiterverarbeiten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich hätte es so

Eingetragen von Tobias Bähr (4019)
am 08.03.2011 - 15:55 Uhr

Ich hätte es so gemacht:

<?php
/**
* Erstellt Menüeinträge
*/
function usersuche_menu() {
 
$items['usersuche'] = array(
   
'title' => 'UserSuche',
   
'page callback' => 'usersuche_formular',
   
'access arguments' => array('access user profiles'),
   
'type' => MENU_NORMAL_ITEM
 
);
  return
$items;
}
// END usersuche_menu


/**
* Gibt das Formular aus
*/
function usersuche_formular($searched_user = NULL){
 
$uebergabe = 'Suche nach Benutzern';
 
$uebergabe .= drupal_get_form('formular');
  if (!empty(
$searched_user)) {
   
$uebergabe .= usersuche_ergebnis($searched_user);
  }
  return
$uebergabe;
}
// END usersuche_formular()


/**
* Hier wird das Formular angelegt
*/
function formular($form_state) {
 
$form = array();
   
$form['vorname'] = array(
   
'#title' => 'Vorname',
   
'#type' => 'textfield',
   
'#description' => 'Hier gib bitte den Vornamen ein',
  );
 
$form['submit'] = array(
   
'#type' => 'submit',
   
'#value' => 'Senden'
 
);
  return
$form;
}
// END formular()

/**
* Das kommt jetzt nach erfolgreicher Validierung
*/
function formular_submit($form, &$form_state) {
drupal_goto('usersuche/'. $form_state['values']['vorname']);
return;
}
// END usersuche_submit()

/**
* Generiert die Ergebnis - Seite
* @param op the operation from the URL
* @param delta offset
* @returns block HTML
*/
function usersuche_ergebnis($searched_user) {
   
//Inhalt der Seite, die nachher zurückgegeben wird
   
$page_content = '';
   
$query = "SELECT uid, name FROM {users} WHERE name = '%s'";
   
$queryResult =  db_query($query, $searched_user);
    while (
$links = db_fetch_object($queryResult)) {
     
$page_content .= l($links->name, 'user/'.$links->uid) . '<br />';
    }
    return
$page_content;
}
// END usersuche_ergebnis()
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

API

Eingetragen von stBorchert (6003)
am 08.03.2011 - 17:01 Uhr

Ich nochmal. Bitte achtet bei den Beispielen darauf, dass ihr auch die Richtlinien der Modulprogrammierung befolgt (mir geht es speziell um übersetzbare Texte und die hier immer wieder falsch verwendete [api:t:6]-Funktion).
Das mag jetzt ein wenig zu detailversessen klingen, aber wenn ein unerfahrener Programmierer diese Zeilen sieht und einfach abschreibt, fängt er gleich mit deutlich falschem Code an.

Also: gleich von Beginn an richtig machen und entsprechend der Regeln programmieren, dann gibt es später auch weniger Dinge, die falsch laufen können.

  • 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 Tagen 17 Stunden
  • Hey danke
    vor 3 Tagen 12 Stunden
  • Update: jetzt gibt's ein
    vor 4 Tagen 6 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 1 Tag
  • Da scheint die Terminologie
    vor 1 Woche 1 Tag
  • Kannst doch auch alles direkt
    vor 1 Woche 6 Tagen
  • In der entsprechenden View
    vor 1 Woche 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 6 Tagen
  • gelöst
    vor 4 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» 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 12 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