【问题标题】:Attaching JS/CSS to forms in Drupal 6将 JS/CSS 附加到 Drupal 6 中的表单
【发布时间】:2011-11-09 22:55:46
【问题描述】:

我熟悉在 Drupal 7 中使用 #attached 属性将 JavaScript 和 CSS 附加到特定表单和表单项的过程。

我遇到了一个可以解决的问题,但不幸的是我正在安装 D6。

基本上,drupal_get_form() 是从主题层调用的(在自定义模板文件中)。它正在打印的表单具有执行 drupal_add_js()(和 css)的 form_alter 钩子,但是由于在主题层中调用了 drupal_get_form,因此这些 JS 文件添加得太晚了,因此没有被包含在内。

这个问题的最佳 Drupal 6 解决方案是什么?

【问题讨论】:

  • 你打电话给drupal_get_form()有什么原因吗?

标签: drupal drupal-6 drupal-theming


【解决方案1】:

正如问题中所说,drupal_get_form() 在页面构建过程中调用太晚,drupal_add_js()drupal_add_js() 调用无法产生任何效果。在主题层调用drupal_get_form() 通常不是问题,但在这种情况下,我假设在这种情况下它是在page-<something>.tpl.php 中调用的。因为 CSS 和 JS 的添加发生在 template_preprocess_page() 的执行之后,它们构建了 $scriptcss$styles 变量。

一个简单的解决方案是从主题的页面模板预处理器调用drupal_get_form(),然后重新构建$scriptcss$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();
}

更好的解决方案是更早地从较低级别的模板(例如node.tpl.phpuser.tpl.php)调用drupal_get_form()。但最好是在页面、块等回调函数中检索主题层之外的表单。

【讨论】:

  • +1 好,简单的方法来做到这一点。我已删除我的答案,因为它似乎不再相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多