Присоединение JS / CSS к формам в Drupal 6 - PullRequest
0 голосов
/ 10 ноября 2011

Я знаком с процессом присоединения JavaScript и CSS к конкретным формам и элементам форм в Drupal 7 с помощью атрибута #attached.

Я сталкиваюсь с проблемой, которая решается, но, к сожалению, яЯ нахожусь на установке D6.

По сути, drupal_get_form () вызывается из слоя темы (в файле пользовательского шаблона).Форма, которую она печатает, имеет ловушки form_alter, которые выполняют drupal_add_js () (и css), но поскольку drupal_get_form вызывается в слое темы, эти файлы JS добавляются слишком поздно и поэтому не включаются.

Как лучше всего решить эту проблему в Drupal 6?

1 Ответ

2 голосов
/ 10 ноября 2011

Как сказано в вопросе, 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).Но лучше всего было бы получить форму за пределами слоя темы в функции обратного вызова страницы, блока и т. Д.

...