包括CSS或Javascript文件为特点,在推6
-
09-06-2019 - |
题
什么是最好的方法包括CSS或Javascript文件对于一个特定的节点在推6.
我想创建一个网页在我的网站,有一点javascript运行的应用程序,所以CSS和javascript是具体到该网页并不想被包含在其他网页载荷。
解决方案 4
最好的解决方案,我已经想出了迄今为止是使PHP输入模式,然后叫 drupal_add_css 和 drupal_add_js 酌情在PHP框在开始你的节点。
其他提示
我建议使用 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();
}
}
这似乎是工作为大多数情况下。
P.S.有几乎没有任何以往任何时候都需要创建一个模块,解决主题问题。
欢呼声。
这似乎是一个很好的解决方案:
http://drupal.org/project/js_injector 和 http://drupal.org/project/css_injector
它的工作,当你想要插入内联码进入其他的东西比技术上的一个节点,所以没有节点的标识和没有PHP输入可用的选项。像我用它注入小jQuery的调整进入一对夫妇的管理的网页。它通过路径,而不是节点标识。
这应该做的把戏-一个匆匆模块,使用的 hook_nodeapi 插入JS/CSS当的节点是查看。
function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
// the node ID of the node you want to modify
$node_to_modify = 6;
// do it!
if($op == 'view' && $node->nid == $node_to_modify) {
drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');
drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
}
}
这将避免安全问题与使PHP输入过滤器,并且不需要一个独立的节点模板文件,该文件可以成为过时的如果你更新的主要节点的模板和忘了你定制一个。
你可以有一定的模板,节点(node-needsjs.tpl.php)要求的javascript。这一点清洁于使用PHP权在节点体,并使得更改的内容更容易的未来。
编辑: 我不认为我很清楚以上。你想名的模板文件的节点(nodeid).tpl.php.所以如果这是节点1,呼吁文件node-1.tpl.php