¿Es posible poner múltiples formularios en una sola página?
Estoy tratando de hacer una página de oferta de cupones. Quería tener dos formularios para dos ofertas diferentes en cada lado de una página. Cada formulario tiene un campo de texto para el código de cupón y su propio botón de envío. La primera forma funciona bien; sin embargo, los valores ocultos de la segunda forma parecen ser anulados por los de la primera forma.
Estoy usando hook_alter para alterar la segunda forma para que sea diferente, pero todavía tiene el mismo form_id que la primera. ¿Es esto lo que está causando mis problemas, o necesito buscar / pensar en otro lugar?
Las dos formas tienen los mismos valores para "form_id" y "form_token", pero valores diferentes para "form_build_id".
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.hook_forms()
no se usa para tener dos formularios con los mismos campos de formulario en la misma página; se usa para permitir tener un único generador de formularios para diferentes ID de formulario.hook_forms()
. El OP está alterando una de las dos formas.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:
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".
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.
Intenté usar el siguiente código en Drupal 6.
El contenido de
$output
los dos formularios fue el siguiente (eliminé el resultado de los campos de formulario único).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.
fuente