Você pode ter mais de um formulário na mesma página; veja o que foi feito por node_admin_content () , que usa o seguinte código:
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;
}
Deixando de fora a primeira instrução IF, a função está adicionando dois formulários diferentes que têm seus próprios manipuladores de envio.
O problema está nos campos de formulário que são repetidos duas vezes. A estrutura de matriz a seguir criaria problemas quando a matriz de formulário é achatada, pois haveria dois campos de "cupom".
$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,
);
Sem ver o código sendo usado, eu poderia pensar que usar um retorno de chamada de página que chame drupal_get_form () é provavelmente a maneira mais fácil, no seu caso.
$output = drupal_get_form("form identifier") . drupal_get_form("form identifier");
Tentei usar o seguinte código no Drupal 6.
module_load_include('inc', 'path', 'path.admin');
$output = drupal_get_form('path_admin_form') . drupal_get_form('path_admin_form');
O conteúdo de $output
para o formulário dois era o seguinte (eu removi a saída para os campos de formulário único).
<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" />
Não há conflito entre o ID HTML atribuído ao mesmo campo de formulário e o valor para "form_build_id" (ou "form_token") é diferente nos dois formulários.
A implementação de hook_form_alter()
usada para alterar o formulário deve ser capaz de entender em que caso alterar o formulário, ou ambos os formulários mostrariam os mesmos campos.
Do ponto de vista da experiência do usuário, não tenho certeza de que mostrar dois formulários diferentes com seus próprios botões de envio seja a melhor maneira de fazer o que você está tentando alcançar.
Eu pensaria que seria melhor usar um formulário que mostre campos diferentes com base nos valores definidos para outros campos. Por exemplo, o formulário poderia ter um seletor para o tipo de cupom e mostraria diferentes campos de formulário com base no tipo de cupom selecionado.
hook_forms()
não resolve isso automaticamente. Se você simplesmente usar o mesmo formulário duas vezes na mesma página, ainda terá o problema de repetir o mesmo campo de formulário duas vezes.