É possível colocar vários formulários em uma única página?
Estou tentando fazer uma página de oferta de cupom. Eu queria ter dois formulários para duas ofertas diferentes em cada lado de uma página. Cada formulário possui um campo de texto para o código do cupom e seu próprio botão de envio. A primeira forma funciona bem; no entanto, os valores ocultos da segunda forma parecem ser substituídos pelos da primeira forma.
Estou usando hook_alter para alterar o segundo formulário para torná-lo diferente, mas ele ainda tem o mesmo form_id que o primeiro. É isso que está causando meus problemas ou preciso procurar / pensar em outro lugar?
Os dois formulários têm os mesmos valores para "form_id" e "form_token", mas valores diferentes para "form_build_id".
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.hook_forms()
não é usado para ter dois formulários com os mesmos campos de formulário na mesma página; é usado para permitir ter um único construtor de formulários para diferentes IDs de formulários.hook_forms()
. O OP está alterando uma das duas formas.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:
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".
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.
Tentei usar o seguinte código no Drupal 6.
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).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.
fonte