BLOG

Formulare - (kl)eine Einführung [1]

Wie schreibe ich ein simples Formular ?  Eine mehrteilige Serie mit Beispielen und kompletter Zusammenfassung aller Formelemente, Attribute, Theming-Tips und anderen Techniken. Dies ist als Einstieg in die Drupal-Form-API gedacht und ersetzt leider nicht Lektüre und selber-herausfinden.
 
  • Ein Formular wird durch ein Array repräsentiert ($form). Dieses wird in der {form_builder}-Funktion definiert.
  • Diese {form_builder}-Funktion (der Name ist frei) muss in hook_menu() deklariert werden.
  • Jedes Form-Item (Checkbox, Textfeld, Button) ist ein Key/Value-Paar im $form Array
  • Ein Form-Item hat eine '#type' Angabe und weitere Attributen: '#title', '#default_value', '#size'...
  • Einfache Formulare
          sind wirklich einfach zu realisieren.
  • Komplizierte Formulare (zB. Multistep)
        sind kompliziert! Besonderes Augenmerk verdient hier $form_state, hier können "Dinge" gemerkt werden...

Siehe auch drupal.org/node/144132.

 Wichtiger Link: Informationen über die Form-Api - enthält auch ein schönes aufbauendes Beispiel in 10 Schritten.

Ein einfaches Beispiel

Hinweis: Die Beispiele befinden sich in einem eigenen Modul mit dem Namen myProject.module. Die Hook-Funktionen heißen deshalb myProject_hookname() o.ä.
Also einfach in sites/all/modules den Ordner myProject mit myProject.module und myProject.info anlegen. Das .module ist anfangs leer - die .info-Datei sieht so aus:
; $Id $
name = myProject
description = Routinen speziell fuer dieses Projekt.
core = 6.x
 
 
 
Ein Formular ist eine Seite und muss Drupal bekannt gemacht werden mit: hook_menu()
function myProject_menu() {  
 $items = array();
 $items['eingang'] = array(                           // die URL
   'title' => 'Miniformular',                         // auch <title> !
    'page callback' => 'myProject_miniformular',      // (Name frei wählbar)
    'access arguments' => array('access content'),    // wer aufrufen darf
    'type' => MENU_CALLBACK,                          // direkter Aufruf
 );
 return $items;
}
 "eingang" ist URL, "Miniformular" ist Überschrift und Titel
 
Die in 'page callback' angegebene Funktion wird aufgerufen und diese erzeugt eine Ausgabe. In diesem Fall das Formular.
Bitte Namenskonventionen beachten...
function myProject_miniformular() {
 $output='Hallo Welt ...';
 return $output.drupal_get_form('_myProject_mini');   // Formulargenerierung
}
 
In mehrstufigen Formularen oder bei Neuaufbau (wegen Eingabefehler) enthält $form_state die letzten eingegebenen Werte.
function _myProject_mini($form_state) {
  $form['url'] = array(
    '#type' => 'textfield',
    '#title' => t('URL eingeben'),
 );
 
 $form['ok'] = array(                                 // Kein Formular ohne
    '#type' => 'submit',                              // SUBMIT
    '#value' => 'Anmelden',
 );

 return $form;
}

 
Validierung kann in {form_builder}_validate()erfolgen
function _myProject_mini_validate($form, &$form_state) {
 if (!menu_get_item($form_state['values']['url'])) {      // gültige URL?
   form_set_error('url', t('Keine g&uuml;ltige URL.'));   // Nein -> Fehlermeldung
 }
}

 
Bei erfolgreichem submit wird {form_builder}_submit() aufgerufen
function _myProject_mini_submit($form, &$form_state) {
 $url=$form_state['values']['url'];
 drupal_set_message(t('Ich springe...'));             // Meldung ausgeben
 drupal_goto($url);
}
 <- Meldung erscheint auf der Zielseite

Hier nochmal zur Übersicht die Kernelemente

1. Eintrag der gewünschten URL per hook_menu()

Funktion für den Seitenaufbau - baut per drupal_get_form() das Formular, das hier beschrieben ist:

2. Funktion der Formularbeschreibung: {form_builder}()

sowie zwei Standardfunktionen für

3. {form_builder}_Validate()

Funktionsname:         {form_builder}_validate($form,&$form_state)
Dient nur der Überprüfung. Fehler werden mit form_set_error('item','meldung') angegeben:
if (!$form_state['values']['ort']) {         // "Ort" ist leer ?
   form_set_error('ort', 'Bitte einen Ort angeben.');    // Element "Ort" wird rot umrandet !
 }

4. {form_builder}_Submit()

Funktionsname:         {form_builder}_submit($form,&$form_state)
Funktion enthält evtl. eine Meldung und endet typischerweise mit einen Sprung:
drupal_set_message(t('Eingabe akzeptiert...'));
drupal_goto('admin/user');
 
Eine Liste aller Funktionen rund um Forms ist hier -> Form Generation
 
Es folgt demnächst die Übersicht aller Feldtypen...

 

Formulare - (kl)eine Einführung [1]
Formulare - (kl)eine Einführung [1]
Formulare - (kl)eine Einführung [1]
Formulare - (kl)eine Einführung [1]

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Mit dem Absenden dieses Formulars, akzeptieren Sie die Datenschutzrichtlinie von Mollom.