在Drupal 6中为特定节点包含CSS或Javascript文件的最佳方法是什么.
我想在我的网站上创建一个运行有一点javascript应用程序的页面,因此CSS和javascript特定于该页面,并且根本不希望包含在其他页面加载中.
我建议不要使用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允许采用级联方法:您可以在模块中使用通用/基本内容,并在主题中提供增强或特定功能.
我使用预处理函数,但这有一些问题.$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几乎没有必要创建一个模块来解决主题问题.
干杯.