Если не отображаются messages с drupal_get_form()

Итак, известно, что абсолютно любую форму в Drupal 7, разумеется сделанную на стандартном Form API, можно заставить выводиться в произвольном месте шаблона (*.tpl.php) или в теле функции-хука. Однако такой вариант имеет одну маленькую, но достаточно противную проблемку: не отображаются системные информационные сообщения $messages.

Абстрактный пример:

<?php
$regForm = drupal_get_form('druwebru_registration_form', 3);
print render($regForm);
?>

Если быть поточнее, то они все-таки отображаются, но с никуда не годным запозданием, - страничку приходится в браузере обновлять, а это в данном контексте вообще неприемлемо.

Очевидным решением, пришедшим практически сразу, стало прописывание перенаправления с drupal_goto() на ту же page в функции валидации формы. Однако недостаток сего способа очевиден: если пользователю придется заполнять множество полей, у него могут возникнуть опечатки и т.п. Валидация выявит ошибки заполнения, а поля посетителю придется заполнять по новой (!). Это однозначно будет раздражать, потому такой вариант по крайней мере мне не подходит.

Путем чтения официальной документации, а также содержимого сайтов drupal.stackexchange.com и stackoverflow.com мною было найдено и слегка модифицировано под Drupal 7 следующее решение:

<?php
global $variables;
$regForm = drupal_get_form('druwebru_registration_form', 3);
print render($regForm); // - наша форма.
print theme_status_messages($variables); // - можно выводить там где вам нужно.
?>
  • Стоит отметить, что стандартные $messages этот трюк вроде бы не затрагивает.
  • Если вы вдруг темизировали вывод системных сообщений Drupal, то используйте вместо theme_status_messages() свою функцию вида druwebru_status_messages(), где вместо названия моего домена, впишите имя темы.

Все.





© 2012-2014 Druweb.ru. Вы можете спокойно копировать любые материалы сайта только при наличии обратной ссылки.