... _submit() wird in der Form_API nicht ausgeführt
Eingetragen von UwBach (310)
am 23.04.2008 - 08:09 Uhr in
am 23.04.2008 - 08:09 Uhr in
Hallo
ich arbeite mich grade in Drupal (Buch::Pro Drupal Development) ein und habe mit einer Funktion Probleme. Das Formular arbeitet ganz gut, allerdings wird die Funktion testform_bspform_submit($form_id, $form_values) nicht ausgeführt. Ich finde den Fehler nicht, kann mit evtl. jemand einen Tip geben?
Das Formular läuft in einem eigenen Modul testform
<?php
// $Id$
/**
* @file
* Testen von Formularelementen
*/
/**
* Ein eigenes Menü muss her
*/
function testform_menu()
{
$items = array();
$items[] = array(
'path' => 'testform',
'title' => t('Beispielsformular'),
'callback' => 'testform_page',
'access' => TRUE,
'type' => MENU_NORMAL_ITEM
);
if($may_cache)
{
}
return $items;
} // END testform_menu()
/**
* Rückgabe der Seite
*/
function testform_page()
{
$uebergabe = t('Das ist ein Beispielsformular');
$uebergabe .= drupal_get_form('testform_bspform');
return $uebergabe;
} // END uwe_form_page()
/**
* Hier wird das Formular angelegt
*/
function testform_bspform()
{
$erlaubte_anrede = array('Frau', 'Herr');
$form['name_fieldset'] = array(
'#title' => t('Dein Name'),
'#type' => 'fieldset',
'#description' => t('Wie heißt du?')
);
$form['name_fieldset']['deine_anrede'] = array(
'#title' => t('Anrede'),
'#type' => 'textfield',
'#description' => t('Bitte die Anrede eingeben (Frau, Herr).'),
'#validate' => array('testform_bspform_anrede_validate' => array($erlaubte_anrede))
);
$form['name_fieldset']['dein_name'] = array(
'#title' => t('Dein Name'),
'#type' => 'textfield',
'#description' => t('Hier gib bitte deinen Namen ein')
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Senden')
);
return $form;
} // END testform_bspform()
/**
* Validierung der Formulareingaben
*/
function testform_bspform_validate($form_id, $form_values)
{
if($form_values['dein_name'] == 'King Kong')
{
form_set_error('dein_name', t('Das glaube ich nicht. Die Finger von King Kong sind zu gross fuer deine Tastatur.'));
}
if($form_values['dein_name'] == 'Willi')
{
form_set_error('dein_name', t('Das glaube ich nicht. Das bin ich.'));
}
} // END testform_bspform_validate()
/**
* Das kommt jetzt nach erfolgreicher Validierung
*/
function testform_bspform_submit($form_id, $form_values)
{
drupal_set_message('Hallo vom Formular');
$name = $form_values['dein_name'];
drupal_set_message(t('Danke für deinen Namen, %name', array('%name' => $name)));
} // testform_bspform_submit()
/**
* Prüfung auf erlaubte Werte über ein Array
*/
function testform_bspform_anrede_validate($element, $erlaubte_anrede)
{
if(!in_array($element['#value'], $erlaubte_anrede))
{
form_error($element, 'Bitte benutzen Sie Herr oder Frau als Anrede.');
}
} // testform_bspform_anrede_validate()
Besten Dank im Voraus
UwBach
- Anmelden oder Registrieren um Kommentare zu schreiben
Ergänzung
am 23.04.2008 - 10:13 Uhr
Die Funktion wird scheinbar doch ausgeführt, nur die drupal_set_message() werden nicht ausgegeben. Kann mir jemand sagen warum?
Der Code wurde um einen Retrun-Wert zur Default-Seite ergänzt.
/**
* Das kommt jetzt nach erfolgreicher Validierung
*/
function testform_bspform_submit($form_id, $form_values)
{
drupal_set_message('Hallo vom Formular');
$name = $form_values['dein_name'];
drupal_set_message(t('Danke für deinen Namen, %name', array('%name' => $name)));
return './';
} // testform_bspform_submit()
Gruß
UwBach