Puede tener más de un formulario en la misma página; vea lo que hace node_admin_content () , que usa el siguiente 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;
}
Dejando de lado la primera instrucción IF, la función agrega dos formas diferentes que tienen sus propios controladores de envío.
El problema está en los campos de formulario que se repiten dos veces. La siguiente estructura de matriz crearía problemas cuando la matriz de formulario se aplana, ya que habría dos campos de "cupón".
$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,
);
Sin ver el código que se está utilizando, podría pensar que usar una devolución de llamada de página que llame a drupal_get_form () es probablemente la forma más fácil, en su caso.
$output = drupal_get_form("form identifier") . drupal_get_form("form identifier");
Intenté usar el siguiente código en Drupal 6.
module_load_include('inc', 'path', 'path.admin');
$output = drupal_get_form('path_admin_form') . drupal_get_form('path_admin_form');
El contenido de $output
los dos formularios fue el siguiente (eliminé el resultado de los campos de formulario ú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" />
No existe un conflicto entre la ID de HTML asignada al mismo campo de formulario, y el valor de "form_build_id" (o "form_token") es diferente en los dos formularios.
La implementación de hook_form_alter()
used to alter the form debería poder entender en qué caso alterar el formulario, o ambos formularios mostrarían los mismos campos.
Desde el punto de vista de la experiencia del usuario, no estoy seguro de que mostrar dos formularios diferentes con sus propios botones de envío sea la mejor manera de hacer lo que está tratando de lograr.
Creo que sería mejor usar un formulario que muestre diferentes campos basándose en los valores establecidos para otros campos. Por ejemplo, el formulario podría tener un selector para el tipo de cupón y mostraría diferentes campos de formulario basados en el tipo de cupón seleccionado.
hook_forms()
no resuelve esto automáticamente. Si simplemente usa el mismo formulario dos veces en la misma página, todavía tiene el problema de repetir el mismo campo de formulario dos veces.