Mam stronę z bardzo prostym szablonem:
<!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>
Zasadniczo wyświetla formularz rejestracyjny i nic więcej.
- W formularzu wpisuję złe dane - już użytą nazwę użytkownika (admin) i brak adresu e-mail.
- Klikam „utwórz nowe konto”.
- Strona wydaje się przesyłać i ładować ponownie, ale nic się nie wydarzyło - nie wyświetla się żaden komunikat o błędzie .
- Odświeżam stronę (F5).
- Firefox wyświetla „aby wyświetlić tę stronę, Firefox musi wysłać informacje, które powtórzą wcześniejszą akcję” - więc wiem, że mój test POST przeszedł wcześniej.
- Klikam „wyślij ponownie” w tym oknie dialogowym.
- Pojawiają się moje komunikaty o błędach - „pole adresu e-mail jest wymagane”, „nazwa administratora jest już zajęta”.
Dzieje się tak w przypadku wszystkich formularzy, które do tej pory testowałem, a nie tylko formularza rejestracyjnego.
Dlaczego to się dzieje? Co mogę zrobić, aby to naprawić, aby komunikaty o błędach były wyświetlane po raz pierwszy?
Cieszę się, że mogę zrobić wszystko, co trzeba, aby to debugować, ale potrzebuję jakiegoś kierunku, aby zacząć szukać. :)
drupal_get_form('user_register')
w$block['content']
. Dołączam ten moduł przez kontekst, a następnie komunikaty o błędach rejestracji pojawiają się poprawnie po przesłaniu. Wydaje się to zbyt skomplikowane, ale działa i pozwala mi dołączyć formularze logowania / rejestracji, jak chcę. Wielkie dzięki za pomoc.Rozwiązaliśmy problem sprawdzania poprawności formularza (sprawdzanie poprawności formularza następuje po wyrenderowaniu wiadomości i pojawia się przy następnym żądaniu) przez ...
wymuszanie sprawdzania poprawności formularza w hook_node_view
źródło
Cierpiałam również na ten problem. Odpowiedź @ googletorp pomogła mi go rozwiązać.
Na początku strony tpl. Uzyskaj renderowaną treść formularzy, tj. W moim przypadku:
Następnie w sekcji drukowania wiadomości pobierz wiadomości wywołujące drupal_get_messages () na stronie tpl. $ messages nadal nie może pobrać wiadomości bez odświeżenia strony.
Następnie wydrukuj renderowaną treść formularza w odpowiedniej sekcji i to rozwiązało :).
źródło
Nie bezpośrednio rozwiązanie zadanego pytania, ale natknąłem się na to, gdy miałem ten sam problem:
Jeśli twój blok formularza jest wywoływany bezpośrednio z pliku tpl.php (być może z powodów układu), otrzymasz opóźnione wiadomości.
To znaczy ładowałem blok z następującym kodem w moim pliku szablonu:
A następnie renderowanie w moim pliku tpl.php.
źródło