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
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; } |
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ü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]](http://www.comm-press.de/sites/default/files/imagecache/scframe160x090/form1.jpg)
![Formulare - (kl)eine Einführung [1]](http://www.comm-press.de/sites/default/files/imagecache/scframe160x090/form2.jpg)
![Formulare - (kl)eine Einführung [1]](http://www.comm-press.de/sites/default/files/imagecache/scframe160x090/form3.jpg)
![Formulare - (kl)eine Einführung [1]](http://www.comm-press.de/sites/default/files/imagecache/scframe160x090/form4.jpg)












