Якщо не відображаються 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(), де замість назви мого домену, впишіть ім’я теми.

Все.

Залишити відповідь

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.