У меня есть страница с очень простым шаблоном:
<!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>
По сути, он отображает регистрационную форму и больше ничего.
- Я ввожу в форму некоторые неверные данные - уже использованное имя пользователя (admin), а не адрес электронной почты.
- Я нажимаю «создать новую учетную запись».
- Кажется, что страница отправляется и перезагружается, но ничего не произошло - сообщения об ошибках не отображаются .
- Я обновляю страницу (F5).
- Firefox отображает «чтобы отобразить эту страницу, Firefox должен отправить информацию, которая будет повторять любое действие, которое было выполнено ранее» - так что я знаю, что мой POST прошел ранее.
- Я нажимаю «повторно» в этом диалоговом окне.
- Появляются мои сообщения об ошибках - «поле адреса электронной почты обязательно», «имя администратора уже занято».
Это происходит для всех форм, которые я тестировал до сих пор, а не только для регистрационной формы.
Почему это происходит? Что я могу сделать, чтобы исправить это, чтобы сообщения об ошибках отображались в первый раз?
Я счастлив сделать все, что мне нужно для отладки, но мне нужно какое-то направление, чтобы начать поиск. :)
drupal_get_form('user_register')
в$block['content']
. Я включаю этот модуль через контекст, и после отправки сообщения об ошибках регистрации отображаются правильно. Это кажется слишком сложным, но это работает, и это позволяет мне включать формы входа / регистрации, как я хочу их. Спасибо огромное за вашу помощь.Мы решили проблему проверки формы (проверка формы происходит после того, как сообщения были обработаны и отображаются при следующем запросе), ..
форсирование проверки формы в hook_node_view
источник
Я тоже страдал от этой проблемы. Ответ @ googletorp помог мне решить эту проблему.
В начале страницы тпл. Получить визуализированный контент форм, т.е. для моего случая:
Затем в разделе печати сообщений получите сообщения, вызывающие drupal_get_messages () на странице tpl. $ messages по-прежнему не может получить сообщения без обновления другой страницы.
Затем распечатайте предоставленное содержание формы в соответствующем разделе, и это решено :).
источник
Непосредственно решение поставленного вопроса, но я столкнулся с этим, когда у меня возникла такая же проблема:
Если ваш блок формы вызывается непосредственно из файла tpl.php (возможно, из-за разметки), вы получите отложенные сообщения.
Т.е. я загружал блок со следующим кодом в мой файл шаблона:
И затем рендеринг в моем файле tpl.php.
источник