2010-04-01 44 views
5

我试图通过使用drupal_add_js()插入引用中的JavaScript文件。我将这一行放在template.php的模板预处理函数中。代码完全不工作的结果:输出中没有脚本链接,因为它应该是。谁能告诉我我做错了什么?添加JavaScript文件

function phptemplate_preprocess_page(&$vars) { 
    $url = drupal_get_path("theme","mysite"); 
    drupal_add_js($url."/jquery.js"); 
    drupal_add_js($url."/drupal.js"); 

..... 

回答

-1

drupal_add_js()的作品,但你把它深入到页面渲染过程。我建议你把它放在template.php中,就像你在做的一样,但是在开始时,在任何函数之外。这就是我们在几个项目中所做的。

+0

你说得对。一旦我把它从功能中拿出来放在全球范围之外,它就像一个魅力一样。:) 我还有另一个问题。它纯粹是知识的缘故。为什么drupal在输出中的两个不同位置添加这些文件两次?有什么想法?以下是它的外观 - – Andrew 2010-04-02 13:25:00

+0

正如用户 - 斯科特所建议的那样,我停止在我的主题文件夹下使用这些文件,而是使用drupal默认值。所以在drupal_add_js函数中没有路径提到;换句话说,只是文件名 - drupal_add_js('jquery.js') – Andrew 2010-04-02 13:25:43

+0

andew,那些2个文件应该自动被drupal添加到主题中。整个js文件的集合都通过page.tpl.php上的<?php print $ scripts?>添加到页面中。 – 2010-04-02 15:57:06

2
drupal_add_js(path_to_theme().'/js/jquery.cycle.all.js'); 
    $vars['scripts'] = drupal_get_js(); 
+0

那么,这是否意味着drupal_add_js函数不会添加脚本标记?因为那是我对drupal帮助的理解。 这就是说,我按照你的建议做了,发生了什么,它添加了这些文件(drupal.js,jquery.js)两次。 :confuse: 下面是它的样子 - Andrew 2010-04-02 01:34:34

+0

你是否在phptemplate_preprocess_page中添加了这段代码? – Nikit 2010-04-02 12:44:01

+2

drupa.js和jquery.js已经被Drupal核心添加了。所以将它们添加到您的主题是创建重复。可以删除默认设置,但不是一个好主意。如果你使用的是不同的版本,那么很可能会在Drupal中破坏一些依赖于核心版本的东西(如果你知道你破了什么并且没问题,但是你似乎不知道)。如果您使用的是相同的版本,移动它们的原因是什么? – 2010-04-02 13:01:55

10

更简单,需要在所有页面上加载的Javascript可以添加到主题的.info文件中。见http://drupal.org/node/171205#scripts

+1

+1有趣......主题信息文件是drupal 7的一个要求,您发布的链接也表示drupal 6默认加载主题文件夹中的所有.js文件。 drupal_add_js可以从模块甚至从节点调用,如果您启用了php输入格式... – 2010-04-02 15:59:51

+1

不,这不完全正确。主题的.info文件在Drupal 6和Drupal 7中都是必需的。D6仅自动加载名为'script.js'的文件。 D7根本不会自动加载js文件。就像你说的那样,drupal_add_js()可以从一个节点调用,但不建议这样做,因为你将内容与表示混合在一起。 – marcvangend 2010-04-02 17:44:23

1

如果您放置在主题目录中的JavaScript文件,你可以添加以下主题.info文件

scripts[] = myJavaScriptFile.js 

添加此文件,你需要停用主题,然后反应它之后。

1

正如其他人所指出的,仅仅使用从hook_preprocess_page()实现不起作用。通过对drupal_add_js()的多次调用收集的对JavaScript文件的引用用于生成template_preprocess_page()$scripts变量的相应标记。但hook_preprocess_page()的主题实现总是在template_preprocess_page()之后调用。所以为了有通过drupal_add_js().tpl.php文件(S)添加的文件,你需要重写已经设置$scripts变量:

function THEME_preprocess_page(&$variables) 
    drupal_add_js(...); 
    $variables['scripts'] = drupal_get_js(); 
} 

但是,你不应该添加jquery.jsdrupal.js自己,这应该已经由Drupal核心自动完成了。如果你需要自己做,那么你的网站上有些东西被打破了。您可以(重新)添加这些文件作为快速修复,但是您最好找到问题的根源,因为它很可能会创建您尚未识别的其他问题(或者在没有意识到的情况下解决问题)。

+0

+1,你也可以在你自己模块的'hook_init()'或'hook_preprocess()'或'hook_preprocess_page()'实现(或类似的钩子)中添加JS文件。 – Sk8erPeter 2012-04-05 09:43:57