Eu tenho uma página com um modelo muito simples:
<!DOCTYPE html>
<html>
<head><title>TEST REGISTRATION PAGE</title></head>
<body>
<?php
print drupal_get_form('user_register');
print $messages;
print $closure;
print $main_content;
?>
</body></html>
Basicamente, ele exibe o formulário de registro e nada mais.
- Entro alguns dados incorretos no formulário - um nome de usuário já usado (admin) e nenhum endereço de email.
- Clico em "criar nova conta".
- A página parece enviar e recarregar, mas nada aconteceu - nenhuma mensagem de erro está sendo exibida .
- Eu atualizo a página (F5).
- O Firefox exibe "para exibir esta página, o Firefox deve enviar informações que repetirão qualquer ação executada anteriormente" - para que eu saiba que meu POST passou anteriormente.
- Clico em "reenviar" nessa janela de diálogo.
- Minhas mensagens de erro são exibidas - "o campo de endereço de e-mail é obrigatório", "o nome admin já está sendo usado".
Isso ocorre em todos os formulários que testei até agora, não apenas no formulário de registro.
Por que isso está acontecendo? O que posso fazer para corrigi-lo para que as mensagens de erro sejam exibidas pela primeira vez?
Fico feliz em fazer o que for necessário para depurar isso, mas preciso de alguma direção para começar a procurar. :)
drupal_get_form('user_register')
no$block['content']
. Incluo esse módulo via contexto e as mensagens de erro de registro são exibidas corretamente após o envio. Parece muito complicado, mas funciona e me permite incluir os formulários de login / registro como eu os quero. Muito obrigado pela sua ajuda.Resolvemos o problema de validação do formulário (a validação do formulário ocorre após a renderização das mensagens e aparece na próxima solicitação), por ..
forçando a validação do formulário em hook_node_view
fonte
Eu também sofri desse problema. A resposta do @ googletorp me ajudou a resolvê-lo.
No início da página tpl. Obtenha o conteúdo renderizado dos formulários, ou seja, para o meu caso:
Em seguida, na seção de impressão de mensagens, obtenha as mensagens chamando drupal_get_messages () na página tpl. $ messages ainda não conseguiu buscar as mensagens sem outra atualização de página.
Em seguida, imprima o conteúdo do formulário renderizado na seção apropriada e ele resolveu :).
fonte
Não é diretamente uma solução para a pergunta, mas me deparei com isso quando estava tendo o mesmo problema:
Se o seu bloco de formulário for chamado diretamente do arquivo tpl.php (talvez por razões de layout), você receberá mensagens atrasadas.
Ou seja, eu estava carregando um bloco com o seguinte código no meu arquivo de modelo:
E depois renderizá-lo no meu arquivo tpl.php.
fonte