Bạn có thể có nhiều hơn một hình thức trong cùng một trang; xem những gì được thực hiện bởi node_admin_content () , sử dụng đoạn mã sau:
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;
}
Thoát khỏi câu lệnh IF đầu tiên, hàm đang thêm hai biểu mẫu khác nhau có trình xử lý đệ trình riêng.
Vấn đề là với các trường mẫu được lặp lại hai lần. Cấu trúc mảng sau sẽ tạo ra vấn đề khi mảng biểu mẫu được làm phẳng, vì sẽ có hai trường "phiếu giảm giá".
$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,
);
Không thấy mã được sử dụng, tôi có thể nghĩ rằng sử dụng một cuộc gọi lại trang gọi drupal_get_form () có lẽ là cách dễ dàng hơn, trong trường hợp của bạn.
$output = drupal_get_form("form identifier") . drupal_get_form("form identifier");
Tôi đã thử sử dụng đoạn mã sau trong Drupal 6.
module_load_include('inc', 'path', 'path.admin');
$output = drupal_get_form('path_admin_form') . drupal_get_form('path_admin_form');
Nội dung của $output
hai mẫu là mẫu sau (Tôi đã loại bỏ đầu ra cho các trường mẫu đơn).
<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" />
Không có xung đột giữa ID HTML được gán cho cùng một trường biểu mẫu và giá trị cho "form_build_id" (hoặc "form_token") khác nhau ở hai biểu mẫu.
Việc triển khai hook_form_alter()
được sử dụng để thay đổi biểu mẫu sẽ có thể hiểu trong trường hợp nào cần thay đổi biểu mẫu hoặc cả hai biểu mẫu sẽ hiển thị cùng các trường.
Từ quan điểm của trải nghiệm người dùng, tôi không chắc chắn rằng hiển thị hai hình thức khác nhau bằng các nút gửi riêng là cách tốt nhất để làm những gì bạn đang cố gắng đạt được.
Tôi nghĩ rằng sử dụng một biểu mẫu hiển thị các trường khác nhau dựa trên các giá trị được đặt cho các trường khác sẽ tốt hơn. Ví dụ: biểu mẫu có thể có bộ chọn cho loại phiếu giảm giá và sẽ hiển thị các trường biểu mẫu khác nhau dựa trên loại phiếu được chọn.
hook_forms()
không tự động giải quyết điều này. Nếu bạn đơn giản sử dụng cùng một biểu mẫu hai lần trên cùng một trang, bạn vẫn gặp vấn đề về việc có cùng một trường biểu mẫu lặp lại hai lần.