J'ai une page avec un modèle très 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>
Fondamentalement, il affiche le formulaire d'inscription et rien d'autre.
- J'entre des données incorrectes sur le formulaire - un nom d'utilisateur déjà utilisé (admin) et aucune adresse e-mail.
- Je clique sur "créer un nouveau compte".
- La page semble se soumettre et se recharger, mais rien ne s'est produit - aucun message d'erreur ne s'affiche .
- Je rafraîchis la page (F5).
- Firefox affiche "pour afficher cette page, Firefox doit envoyer des informations qui répéteront toute action effectuée précédemment" - je sais donc que mon POST a déjà été effectué.
- Je clique sur «renvoyer» dans cette fenêtre de dialogue.
- Mes messages d'erreur apparaissent - "le champ d'adresse e-mail est obligatoire", "le nom admin est déjà pris".
Cela se produit pour tous les formulaires que j'ai testés jusqu'à présent, pas seulement pour le formulaire d'inscription.
Pourquoi cela arrive-t-il? Que puis-je faire pour le corriger afin que les messages d'erreur s'affichent pour la première fois?
Je suis heureux de faire tout ce dont j'ai besoin pour déboguer cela, mais j'ai besoin d'une direction pour commencer à chercher. :)
drupal_get_form('user_register')
dans le$block['content']
. J'inclus ce module via le contexte, puis les messages d'erreur d'enregistrement s'affichent correctement après la soumission. Cela semble trop compliqué mais cela fonctionne et cela me permet d'inclure les formulaires de connexion / enregistrement comme je les veux. Merci beaucoup pour votre aide.Nous avons résolu le problème de validation du formulaire, (la validation du formulaire se produisant après le rendu des messages et apparaissant à la prochaine demande), par ..
forcer la validation du formulaire dans hook_node_view
la source
J'ai également souffert de ce problème. La réponse de @ googletorp m'a aidé à le résoudre.
Au début de la page tpl. Obtenez le contenu rendu des formulaires, c'est-à-dire pour mon cas:
Ensuite, dans la section d'impression des messages, récupérez les messages appelant drupal_get_messages () sur la page tpl. $ messages n'est toujours pas en mesure de récupérer les messages sans une autre actualisation de page.
Imprimez ensuite le contenu du formulaire rendu dans la section appropriée et il est résolu :).
la source
Pas directement une solution à la question posée, mais je suis tombé sur ce problème lorsque j'avais le même problème:
Si votre bloc de formulaire est appelé directement à partir du fichier tpl.php (peut-être pour des raisons de disposition), vous obtiendrez des messages différés.
C'est-à-dire que je chargeais un bloc avec le code suivant dans mon fichier modèle:
Et puis le rendre dans mon fichier tpl.php.
la source