当前位置:  开发笔记 > 编程语言 > 正文

在Drupal 6中包含特定节点的CSS或Javascript文件

如何解决《在Drupal6中包含特定节点的CSS或Javascript文件》经验,为你挑选了2个好方法。

在Drupal 6中为特定节点包含CSS或Javascript文件的最佳方法是什么.

我想在我的网站上创建一个运行有一点javascript应用程序的页面,因此CSS和javascript特定于该页面,并且根本不希望包含在其他页面加载中.



1> Inferis..:

我建议不要使用hook_nodeapi它.添加CSS和Javascript与布局有关,因此hook_nodeapi不适合它:使用主题.这样,您可以在开发新主题时覆盖这些文件.使用nodeapi方法执行此操作会有点困难(您必须在js/css列表中搜索文件,删除它们并用您自己的文件替换它们).

无论如何:你需要做的是添加一个节点预处理功能,为你添加这些文件.您可以在模块或自定义主题中执行此操作.对于一个模块,这将是:

function mymodule_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . "/file.js", "module");
    drupal_add_css(drupal_get_path('module', 'mymodule') . "/file.css", "module");
  }
}

或主题:

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
  }
}

首先,不要忘记清除缓存.

在节点为主题之前调用这些函数.指定js/css允许采用级联方法:您可以在模块中使用通用/基本内容,并在主题中提供增强或特定功能.



2> 小智..:

我使用预处理函数,但这有一些问题.$variables['styles']通常调用节点预处理函数之前设置.换句话说drupal_get_css,已经调用它会让你调用drupal_add_css无用.同样的道理drupal_add_js.我通过重置$variables['styles']值来解决这个问题.

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
    $variables['styles'] = drupal_get_css();
    $variables['script'] = drupal_get_js();
  }
}

这似乎适用于大多数情况.

PS几乎没有必要创建一个模块来解决主题问题.

干杯.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有