1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. Решение проблем

Нюанс при загрузке форм через drupal_get_form

Главные вкладки

Хочу поделиться одним смешным моментом, на поиски которого потратил два вечера.

В друпале есть замечательный метод drupal_get_form, который позволяет загружать формы по FORM_ID.

Рабочий пример использования:

<?php
print drupal_get_form ('user_register');
?>

Меня интересовала форма menu_overview_form (отвечает за "List items" для меню),
применительно к primary-links

Я нашел, что в функции бывает дополнительный параметр, который передается в конструктор формы, если таковой требуется
(спасибо http://www.drupal.ru/node/30663)

Заглянув в модуль Menu, посмотрел что ждет конструктор и записал так:

<?php
$menu = array ('menu_name' => 'primary-links');
print drupal_get_form ('menu_overview_form', $menu);
?>

Долго мучал варианты, но упорно получаю ошибку:

warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'menu_overview_form' was given in \www\includes\form.inc on line 378.

дескать, callback не валидный, а значит у вас не правильный FORM_ID.
но в FORM_ID я был уверен и не понимал где и почему отпал callback.

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

решил сделать это руками:

<?php
[user=include]include[/user] 'modules/menu/menu.admin.inc';

$menu = array ('menu_name' => 'primary-links');
print drupal_get_form ('menu_overview_form', $menu);
?>

о чудо, оно заработало!

Нюанс оказался в том, что инклуды надо инклудить Wink

p.s.
раз уж дело сформулировал, решил отправить.
но уже не как вопрос, а как ответ.
вдруг кому-то пригодиться.

Комментарии

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /