Anda dapat memiliki lebih dari satu formulir di halaman yang sama; lihat apa yang dilakukan oleh node_admin_content () , yang menggunakan kode berikut:
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;
}
Meninggalkan pernyataan IF pertama, fungsi ini menambahkan dua bentuk berbeda yang memiliki penangan pengajuan mereka sendiri.
Masalahnya adalah dengan bidang formulir yang diulang dua kali. Struktur array berikut akan membuat masalah ketika array bentuk diratakan, karena akan ada dua bidang "kupon".
$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,
);
Tanpa melihat kode yang digunakan, saya dapat berpikir bahwa menggunakan panggilan balik halaman yang memanggil drupal_get_form () mungkin merupakan cara yang lebih mudah, dalam kasus Anda.
$output = drupal_get_form("form identifier") . drupal_get_form("form identifier");
Saya mencoba menggunakan kode berikut di Drupal 6.
module_load_include('inc', 'path', 'path.admin');
$output = drupal_get_form('path_admin_form') . drupal_get_form('path_admin_form');
Konten $output
untuk dua formulir adalah yang berikut (saya menghapus output untuk bidang formulir tunggal).
<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" />
Tidak ada konflik antara ID HTML yang ditetapkan ke bidang formulir yang sama, dan nilai untuk "form_build_id" (atau "form_token") berbeda dalam dua bentuk.
Implementasi yang hook_form_alter()
digunakan untuk mengubah formulir harus dapat memahami dalam hal mana untuk mengubah formulir, atau kedua formulir akan menampilkan bidang yang sama.
Dari sudut pandang pengalaman pengguna, saya tidak yakin menunjukkan dua bentuk berbeda dengan tombol pengiriman mereka sendiri adalah cara terbaik untuk melakukan apa yang ingin Anda capai.
Saya akan berpikir bahwa menggunakan formulir yang memperlihatkan bidang berbeda berdasarkan pada nilai yang ditetapkan untuk bidang lain akan lebih baik. Misalnya, formulir dapat memiliki pemilih untuk jenis kupon, dan akan menampilkan bidang formulir yang berbeda berdasarkan jenis kupon yang dipilih.
hook_forms()
tidak secara otomatis menyelesaikan ini. Jika Anda sederhana menggunakan formulir yang sama dua kali di halaman yang sama, Anda masih memiliki masalah dengan bidang formulir yang sama diulang dua kali.