同じページに複数のフォームを含めることができます。次のコードを使用するnode_admin_content()によって何が行われるかを確認します。
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;
}
最初のIFステートメントを省略して、関数は独自の送信ハンドラーを持つ2つの異なるフォームを追加しています。
問題は、フォームフィールドが2回繰り返されることです。次の配列構造は、2つの「クーポン」フィールドがあるため、フォーム配列をフラット化すると問題を引き起こします。
$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,
);
使用されているコードを確認しないと、drupal_get_form()を呼び出すページコールバックを使用する方が、おそらくあなたの場合はより簡単な方法だと思います。
$output = drupal_get_form("form identifier") . drupal_get_form("form identifier");
Drupal 6で次のコードを使用してみました。
module_load_include('inc', 'path', 'path.admin');
$output = drupal_get_form('path_admin_form') . drupal_get_form('path_admin_form');
$output
2つのフォームの内容は次のとおりです(単一のフォームフィールドの出力は削除しました)。
<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" />
同じフォームフィールドに割り当てられたHTML ID間に矛盾はなく、 "form_build_id"(または "form_token")の値は2つのフォームで異なります。
hook_form_alter()
フォームを変更するために使用されるの実装は、フォームを変更する場合を理解できる必要があります。そうでない場合、両方のフォームに同じフィールドが表示されます。
ユーザーエクスペリエンスの観点から、独自の送信ボタンを備えた2つの異なるフォームを表示することが、達成しようとしていることを行うための最良の方法であるかどうかはわかりません。
他のフィールドに設定された値に基づいて異なるフィールドを表示するフォームを使用する方が良いと思います。たとえば、フォームにはクーポンのタイプのセレクターがあり、選択したクーポンのタイプに基づいて異なるフォームフィールドが表示されます。
hook_forms()
しても、これは自動的には解決されません。同じページで同じフォームを2回単純に使用する場合でも、同じフォームフィールドが2回繰り返されるという問題があります。