Formular mit D7

am 11.01.2011 - 22:03 Uhr in
Hallo!
Der nachfolgende Code aus einem Testmodul funktiniert unter Drupal 6 einwandfrei, unter Drupal 7 nicht mehr. Anstelle des Textfeldes und des Submit-Buttons erscheint nur das Wort "Array". Was muß geändert werden damit der Code auch unter D7 läuft?
Danke!
function formexample_menu(){
$items['formexample'] = array(
'title' => 'View the form',
'page callback' => 'formexample_page',
'access arguments' => array('access content'),
);
return $items;
}
function formexample_page(){
$output = t('This page contains our example form');
$output .= drupal_get_form('formexample_nameform');
return $output;
}
function formexample_nameform(){
$form['username'] = array(
'#title' => t('Your name'),
'#type' => 'textfield',
'#description' => t('Please enter your name'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
function formexample_nameform_validate($form, &$form_state){
if($form_state['values']['username'] == 'King Kong'){
form_set_error('username', t('King Kong is not allowed to use this form!'));
}
}
function formexample_nameform_submit($form, &$form_state){
$name = $form_state['values']['username'];
drupal_set_message(t('Thanks for filling out the form , %name', array('%name' => $name)));
}
- Anmelden oder Registrieren um Kommentare zu schreiben
render
am 12.01.2011 - 08:41 Uhr
Hallo.
Ich hab Dein Code-Fragment mal formatiert und in "code"-Tags gepackt. Das erhöht die Lesbarkeit ungemein.
Zum Problem: wenn Du das Formular holst und in einen String packst, musst Du Dich selbst darum kümmern, dass es gerendert wird:
<?php
function formexample_page(){
$output = t('This page contains our example form');
$output .= render(drupal_get_form('formexample_nameform'));
return $output;
}
?>
Ergebnis: http://screencast.com/t/Nxh78SvLP
[api:drupal_get_form:7] liefert nur ein Array zurück. Wenn Du die Funktion als "page callback" verwendest, wird automatisch [api:render:7] aufgerufen. Wenn Du einen eigenen "page callback" verwendest, musst Du [api:render:7] selbst aufrufen, damit das Formular erzeugt wird.
hth,
Stefan
Page Callback
am 12.01.2011 - 09:14 Uhr
Hallo Stefan,
vielen Dank für Deine Hilfe, ja das Script läuft jetzt.
Noch eine Frage: Wie genau muß die Funktion formexample_menu aussehen, wenn ich als "page callback" drupal_get_form angebe, es muß ja irgendwie auf die Funktion "formexample_nameform" verwiesen werden. Wenn ich "formexample_nameform" als "page arguments" übergebe klappt das nicht.
Danke!
Gruß Rüdiger
drupal_get_form
am 12.01.2011 - 09:48 Uhr
Du musst den Funktionsnamen des page arguments in ein Array packen:
<?php
function mymodule_menu() {
$items['formexample'] = array(
'title' => 'Test',
'page callback' => 'drupal_get_form',
'page arguments' => array('formexample_nameform'),
);
}
?>
Stefan
Danke
am 12.01.2011 - 23:36 Uhr
Vielen Dank Stefan!
Gruß Rüdiger