Как сказано в вопросе, drupal_get_form()
вызывается слишком поздно в процессе построения страницы, чтобы вызовы drupal_add_js()
и drupal_add_js()
имели какой-либо эффект.Вызов drupal_get_form()
в слое темы, как правило, не является проблемой, но в этом случае я предполагаю, что в этом случае он вызывается в page-<something>.tpl.php
.Поскольку добавление CSS и JS происходит после выполнения template_preprocess_page()
, которые строят переменные $script
, css
и $styles
.
Простое решение - вызвать drupal_get_form()
из препроцессора шаблона страницы вашей темы, а затем пересоберите переменные $script
, css
и $styles
.
function THEME_preprocess_page(&$variables) {
$form = drupal_get_form('the_form_name');
$variables['my_form'] = $form;
$variables['styles'] = drupal_get_css();
$variables['css'] = drupal_add_css();
$variables['scripts'] = drupal_get_js();
}
Лучшим решением будет вызов drupal_get_form()
ранее, из более низкогошаблон уровня (например, node.tpl.php
ou user.tpl.php
).Но лучше всего было бы получить форму за пределами слоя темы в функции обратного вызова страницы, блока и т. Д.