Sie können mehr als ein Formular auf derselben Seite haben. Sehen Sie, was mit node_admin_content () gemacht wird , das den folgenden Code verwendet:
function node_admin_content($form_state) {
if (isset($form_state['values']['operation']) && $form_state['values']['operation'] == 'delete') {
return node_multiple_delete_confirm($form_state, array_filter($form_state['values']['nodes']));
}
$form = node_filter_form();
$form['#theme'] = 'node_filter_form';
$form['admin'] = node_admin_nodes();
return $form;
}
Ohne die erste IF-Anweisung fügt die Funktion zwei verschiedene Formulare hinzu, die über eigene Übermittlungshandler verfügen.
Das Problem liegt in den Formularfeldern, die zweimal wiederholt werden. Die folgende Array-Struktur würde Probleme verursachen, wenn das Formular-Array abgeflacht wird, da zwei "Coupon" -Felder vorhanden wären.
$form['first form']['coupon'] = array(
'#type' => 'textfield',
'#title' => t('Coupon'),
'#default_value' => variable_get('mymodule_coupon'),
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);
$form['second form']['coupon'] = array(
'#type' => 'textfield',
'#title' => t('Coupon'),
'#default_value' => variable_get('mymodule_coupon'),
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);
Ohne den verwendeten Code zu sehen, könnte ich denken, dass die Verwendung eines Seitenrückrufs, der drupal_get_form () aufruft, in Ihrem Fall wahrscheinlich der einfachere Weg ist.
$output = drupal_get_form("form identifier") . drupal_get_form("form identifier");
Ich habe versucht, den folgenden Code in Drupal 6 zu verwenden.
module_load_include('inc', 'path', 'path.admin');
$output = drupal_get_form('path_admin_form') . drupal_get_form('path_admin_form');
Der Inhalt $output
für die beiden Formulare war der folgende (ich habe die Ausgabe für die einzelnen Formularfelder entfernt).
<form action="/dr61/devel/php" accept-charset="UTF-8" method="post" id="path-admin-form-1">
<div><div class="form-item" id="edit-language-1-wrapper">
<input type="submit" name="op" id="edit-submit" value="Create new alias" class="form-submit" />
<input type="hidden" name="form_build_id" id="form-4eb9304baac34f292901ca23d925ff03" value="form-4eb9304baac34f292901ca23d925ff03" />
<input type="hidden" name="form_token" id="edit-path-admin-form-form-token" value="cd429a06b84e381eb82ef04cd5033eeb" />
<input type="hidden" name="form_id" id="edit-path-admin-form" value="path_admin_form" />
<form action="/dr61/devel/php" accept-charset="UTF-8" method="post" id="path-admin-form-1">
<div><div class="form-item" id="edit-language-1-wrapper">
<input type="submit" name="op" id="edit-submit-1" value="Create new alias" class="form-submit" />
<input type="hidden" name="form_build_id" id="form-fb363c7ca6d88f71d98e86f8a69b0379" value="form-fb363c7ca6d88f71d98e86f8a69b0379" />
<input type="hidden" name="form_token" id="edit-path-admin-form-form-token-1" value="cd429a06b84e381eb82ef04cd5033eeb" />
<input type="hidden" name="form_id" id="edit-path-admin-form-1" value="path_admin_form" />
Es besteht kein Konflikt zwischen der HTML-ID, die demselben Formularfeld zugewiesen ist, und der Wert für "form_build_id" (oder "form_token") unterscheidet sich in beiden Formularen.
Die Implementierung von hook_form_alter()
verwendet, um das Formular zu ändern, sollte verstehen können, in welchem Fall das Formular geändert werden muss, da sonst beide Formulare dieselben Felder anzeigen würden.
Aus Sicht der Benutzererfahrung bin ich mir nicht sicher, ob das Anzeigen von zwei verschiedenen Formularen mit eigenen Übermittlungsschaltflächen der beste Weg ist, um das zu tun, was Sie erreichen möchten.
Ich würde denken, dass es besser wäre, ein Formular zu verwenden, das verschiedene Felder basierend auf den für andere Felder festgelegten Werten anzeigt. Das Formular könnte beispielsweise einen Selektor für den Coupontyp haben und verschiedene Formularfelder anzeigen, die auf dem ausgewählten Coupontyp basieren.
hook_forms()
löst dies nicht automatisch. Wenn Sie dasselbe Formular einfach zweimal auf derselben Seite verwenden, besteht immer noch das Problem, dass dasselbe Formularfeld zweimal wiederholt wird.