Tengo una página con una plantilla muy simple:
<!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>
Básicamente, muestra el formulario de registro y nada más.
- Ingreso algunos datos incorrectos en el formulario: un nombre de usuario ya utilizado (administrador) y ninguna dirección de correo electrónico.
- Hago clic en "crear nueva cuenta".
- La página parece enviarse y recargarse, pero no ha sucedido nada, no se muestran mensajes de error .
- Actualizo la página (F5).
- Firefox muestra "para mostrar esta página, Firefox debe enviar información que repita cualquier acción que se haya realizado anteriormente", por lo que sé que mi POST se realizó anteriormente.
- Hago clic en "reenviar" en esa ventana de diálogo.
- Aparecen mis mensajes de error: "el campo de dirección de correo electrónico es obligatorio", "el nombre admin ya está en uso".
Esto ocurre para todos los formularios que he probado hasta ahora, no solo el formulario de registro.
¿Por qué está pasando esto? ¿Qué puedo hacer para solucionarlo y que los mensajes de error aparezcan por primera vez?
Estoy feliz de hacer lo que sea necesario para depurar esto, pero necesito alguna dirección para comenzar a buscar. :)
drupal_get_form('user_register')
en el$block['content']
. Incluyo ese módulo a través del contexto y luego los mensajes de error de registro se muestran correctamente después del envío. Parece demasiado complicado, pero funciona y me permite incluir los formularios de inicio de sesión / registro como los quiero. Muchas gracias por tu ayuda.Resolvimos el problema de validación del formulario (la validación del formulario ocurre después de que los mensajes se han procesado y se muestran en la siguiente solicitud), por ...
forzando la validación del formulario en hook_node_view
fuente
También sufrí de este problema. La respuesta de @ googletorp me ayudó a resolverlo.
Al comienzo de la página tpl. Obtener el contenido procesado de los formularios, es decir, para mi caso:
Luego, en la sección de impresión de mensajes, obtenga los mensajes llamando a drupal_get_messages () en la página tpl. $ messages todavía no puede recuperar los mensajes sin otra actualización de la página.
Luego imprima el contenido del formulario representado en la sección adecuada y se resolvió :).
fuente
No es una solución directa para la pregunta formulada, pero me encontré con esto cuando tenía el mismo problema:
Si su bloque de formulario se llama directamente desde el archivo tpl.php (quizás por razones de diseño), recibirá mensajes retrasados.
Es decir, estaba cargando un bloque con el siguiente código en mi archivo de plantilla:
Y luego renderizándolo en mi archivo tpl.php.
fuente