2010-04-01 117 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