[Gelöst] Multiple Forms
am 02.10.2010 - 12:55 Uhr in
Hallo,
ich versuche grade 2 Forms auf einer Seite darzustellen. Folgenden Ansatz verwende ich im Moment:
hook_menu():
<?php
function server_menu() {
$items = array();
$items['admin/server'] = array(
'title' => 'Server',
'description' => 'Server Dashboard',
'page callback' => 'server_dashboard',
'page arguments' => array('server_dashboard'),
'access arguments' => array('access server'),
'file' => 'server.dashboard.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['admin/server/settings'] = array(
'title' => 'Settings',
'description' => 'Control the way that the server Module operates.',
'page callback' => 'drupal_get_form',
'page arguments' => array('server_settings'),
'access arguments' => array('access server'),
'file' => 'server.admin.inc',
);
$items['admin/server/settings/server'] = array(
'title' => 'Server',
'description' => 'Server settings',
'page callback' => 'drupal_get_form',
'page arguments' => array('server_settings_server_add', 'server_settings_server_edit'),
'access arguments' => array('access server'),
'file' => 'server.admin.inc',
);
return $items;
}
?>wie man an " 'page arguments' => array('server_settings_server_add', 'server_settings_server_edit')," sieht versuche ich da zwei forms aufzurufen. Momentan wird aber nur die erste dargestellt.
Die Forms bzw. server.admin.inc:
<?php
function server_settings_server_add($form_state) {
$form = array();
$form['server_settings_server_add'] = array(
'#type' => 'fieldset',
'#title' => t('Add Server'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['server_settings_server_add']['submit'] = array('#type' => 'submit', '#value' => t('Add'));
return $form;
}
function server_settings_server_edit($form_state1) {
$form1 = array();
$form1['server_settings_server_edit'] = array(
'#type' => 'fieldset',
'#title' => t('Edit Server'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form1['server_settings_server_edit']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
return $form1;
}
?>wie gesagt, Ziel soll es sein mehrere Forms auf einer Seite zu haben, ist mein Lösungsansatz Grundsätzlich falsch oder hat sich irgendwo ein Fehler eingeschlichen?
MfG, N20
- Anmelden oder Registrieren um Kommentare zu schreiben

Also ich würde mal behaupten,
am 02.10.2010 - 13:42 Uhr
Also ich würde mal behaupten, dass dein Weg falsch ist, denn du rufst als Callback die Funktion drupal_get_form auf und übergibst an diese Funktion zwei Argumente. Der Funktionsaufruf sieht dann quasi so aus:
<?php drupal_get_form('server_settings_server_add', server_settings_server_edit);?>Und das wird natürlich nichts, denn dort wird natürlich nur das erste Formular aufgerufen, weil auch nur das erste Formular übergeben wird (geht auch gar nicht anders, soweit ich weiß).
Aber probier's doch mal so:
<?php
function server_menu() {
$items = array();
$items['admin/server'] = array(
'title' => 'Server',
'description' => 'Server Dashboard',
'page callback' => 'server_dashboard',
'page arguments' => array('server_dashboard'),
'access arguments' => array('access server'),
'file' => 'server.dashboard.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['admin/server/settings'] = array(
'title' => 'Settings',
'description' => 'Control the way that the server Module operates.',
'page callback' => 'drupal_get_form',
'page arguments' => array('server_settings'),
'access arguments' => array('access server'),
'file' => 'server.admin.inc',
);
//Hier wird geändert
$items['admin/server/settings/server'] = array(
'title' => 'Server',
'description' => 'Server settings',
'page callback' => 'server__serversettings_forms', //wir rufen nicht drupal_get_form auf, sondern eine eigene Funktion, die drupal_get_form 2x aufruft
'access arguments' => array('access server'),
);
return $items;
}
//Diese Funktion ruft drupal_get_form 2x auf und gibt beide Formulare aus
function server_serversettings_forms()
{
$output = "";
$path = drupal_get_path('module', 'server');
include "$path/server.admin.inc";
$output = drupal_get_form('server_settings_server_add');
$output .= '<br /><br />';
$output .= drupal_get_form('server_settings_server_edit');
return $output;
}
?>
Damit dürften dann beide Formulare ausgegeben werden.
So ähnlich habe ich das jetzt
am 02.10.2010 - 13:59 Uhr
So ähnlich habe ich das jetzt in der Zwischenzeit auch gelöst, habe für den Callback eine eigene Funktion gemacht dort einfach die beiden Forms mittels drupal_get_form aufgerufen.
Meine Funktion so aus:
<?php
function server_settings() {
$page_content = '';
$page_content .= drupal_get_form('server_settings_add', $form_state_add);
$page_content .= drupal_get_form('server_settings_edit', $form_state_edit);
if ($page_content == '') {
$page_content = "No content for this page.";
}
return $page_content;
}
?>
Danke!