Ich habe eine Seite mit einer sehr einfachen Vorlage:
<!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>
Grundsätzlich wird das Registrierungsformular und sonst nichts angezeigt.
- Ich gebe einige schlechte Daten in das Formular ein - einen bereits verwendeten Benutzernamen (admin) und keine E-Mail-Adresse.
- Ich klicke auf "Neues Konto erstellen".
- Die Seite scheint zu senden und neu zu laden, aber es ist nichts passiert - es werden keine Fehlermeldungen angezeigt .
- Ich aktualisiere die Seite (F5).
- Firefox zeigt an, "um diese Seite anzuzeigen, muss Firefox Informationen senden, die alle zuvor ausgeführten Aktionen wiederholen" - damit ich weiß, dass mein POST zuvor durchlaufen wurde.
- Ich klicke in diesem Dialogfenster auf "Erneut senden".
- Meine Fehlermeldungen werden angezeigt - "E-Mail-Adressfeld ist erforderlich", "Der Name admin ist bereits vergeben".
Dies gilt für alle Formulare, die ich bisher getestet habe, nicht nur für das Registrierungsformular.
Warum passiert dies? Was kann ich tun, um das Problem zu beheben, damit die Fehlermeldungen beim ersten Mal angezeigt werden?
Ich bin glücklich, alles zu tun, was ich brauche, um dies zu debuggen, aber ich brauche eine Richtung, um nachzuschauen. :)
drupal_get_form('user_register')
in das zurückzukehren$block['content']
. Ich füge dieses Modul über den Kontext hinzu und dann werden die Registrierungsfehlermeldungen nach dem Absenden korrekt angezeigt. Es scheint zu kompliziert, aber es funktioniert und ich kann die Anmelde- / Registrierungsformulare so einfügen, wie ich sie haben möchte. Vielen Dank für Ihre Hilfe.Wir haben das Problem der Formularüberprüfung (Formularüberprüfung erfolgt nach dem Rendern der Nachrichten und wird bei der nächsten Anforderung angezeigt) durch ... gelöst.
Erzwingen der Formularüberprüfung in hook_node_view
quelle
Ich habe auch unter diesem Problem gelitten. Die Antwort von @ googletorp hat mir geholfen, das Problem zu lösen.
Am Anfang der Seite tpl. Holen Sie sich den gerenderten Inhalt von Formularen, dh für meinen Fall:
Rufen Sie dann im Abschnitt zum Drucken von Nachrichten die Nachrichten ab, die drupal_get_messages () auf der Seite tpl aufrufen. $ messages kann die Nachrichten ohne eine weitere Seitenaktualisierung immer noch nicht abrufen.
Dann drucke den gerenderten Formularinhalt im richtigen Bereich und es wurde gelöst :).
quelle
Keine direkte Lösung für die gestellte Frage, aber ich bin darauf gestoßen, als ich das gleiche Problem hatte:
Wenn Ihr Formularblock direkt aus der Datei tpl.php aufgerufen wird (möglicherweise aus Layoutgründen), erhalten Sie verzögerte Nachrichten.
Dh ich habe einen Block mit dem folgenden Code in meine Vorlagendatei geladen:
Und dann in meiner tpl.php-Datei rendern.
quelle