2010-04-01 13 views
5

Sto cercando di inserire il riferimento al file Javascript nell'intestazione utilizzando drupal_add_js(). Ho inserito questa linea all'interno della funzione di pre-elaborazione del template in template.php. Il risultato è che il codice non funziona affatto: non c'è nessun collegamento di script in output come dovrebbe essere. Qualcuno può dirmi cosa sto sbagliando?Aggiunta di un file JavaScript

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

..... 

risposta

-1

drupal_add_js() opere, ma si sta mettendo in profondità nel processo di rendering pagina. Ti suggerisco di metterlo nel template.php come stai facendo, ma all'inizio, al di fuori di qualsiasi funzione. Questo è quello che abbiamo fatto su alcuni dei nostri progetti.

+0

Hai ragione. Una volta che l'ho estratto dalla funzione e l'ho posizionato all'esterno nell'ambito globale, funziona come un fascino :) :) Ho un'altra domanda però. si tratta puramente di conoscenza. Perché drupal aggiunge questi file due volte da due diverse posizioni nell'output? Ecco come appare - – Andrew

+0

Come suggerito dall'utente - scott, ho smesso di usare quei file nella mia cartella dei temi e ho usato i valori predefiniti di drupal. Quindi non c'è alcun riferimento alla funzione drupal_add_js; in altre parole, solo il nome del file - drupal_add_js ('jquery.js') – Andrew

+0

eew, quei due file dovrebbero essere automaticamente aggiunti al tema da drupal. l'intera raccolta di file js viene aggiunta alla pagina dagli on page.tpl.php –

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

Quindi, significa che la funzione drupal_add_js non aggiunge tag di script? Perché quella era la mia comprensione dell'aiuto drupal. Detto questo, ho fatto come suggerito e, quello che è successo è che, ha aggiunto quei file (drupal.js, jquery.js) due volte. : confuse: Ecco come appariva - Andrew

+0

Hai aggiunto questo codice in phptemplate_preprocess_page? – Nikit

+2

drupa.js e jquery.js sono già stati aggiunti da Drupal core. Quindi aggiungerli al tuo tema è creare duplicati. È possibile rimuovere i valori predefiniti, ma non è una buona idea. Se stai usando versioni diverse, è probabile che si rompa qualcosa in Drupal che si basa sulle versioni fornite con core (che va bene se sai cosa stai infrangendo e va bene con quello, ma non sembri sapere). E se stai usando le stesse versioni, qual è la ragione per spostarle? –

10

Ancora più semplice, il Javascript che deve essere caricato su tutte le pagine può essere aggiunto nel file .info del tema. Vedi http://drupal.org/node/171205#scripts.

+1

+1 interessante ... il file di informazioni sul tema è un requisito di drupal 7, il link che hai postato dice anche che drupal 6 carica tutti i file .js dalla cartella dei temi per impostazione predefinita. drupal_add_js può essere chiamato dai moduli e anche dai nodi se hai il formato di input php abilitato ... –

+1

No, non è completamente corretto. Il file .info per un tema è richiesto in Drupal 6 e Drupal 7. D6 carica solo automaticamente il file chiamato "script.js". D7 non carica automaticamente i file js. Come dici tu, drupal_add_js() può essere chiamato da un nodo, ma non è consigliato perché stai mescolando il contenuto con la presentazione. – marcvangend

1

Se si inserisce il file javascript nella cartella del tema, si può semplicemente aggiungere il seguente ai temi .info file di

scripts[] = myJavaScriptFile.js 

Dopo aver aggiunto questo file è necessario disattivare il vostro tema e poi reattiva esso.

1

Come indicato da altri, semplicemente utilizzando drupal_add_js() da un'implementazione hook_preprocess_page() non funziona. I riferimenti ai file JavaScript raccolti attraverso le chiamate multiple a drupal_add_js() vengono utilizzati per generare il markup corrispondente nelle variabili $scripts da template_preprocess_page(). L'implementazione di un tema di hook_preprocess_page() viene sempre chiamata dopo template_preprocess_page(). Quindi, al fine di avere i file aggiunti attraverso drupal_add_js() nel .tpl.php file (s), è necessario eseguire l'override del già impostato $scripts variabili:

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

Ma, non si dovrebbero avere per aggiungere jquery.js e drupal.js te stesso, dovrebbe già essere fatto automaticamente dal core Drupal. Se hai bisogno di farlo da solo, allora qualcosa è rotto sul tuo sito. È possibile (ri) aggiungere i file come soluzione rapida, ma è meglio individuare la causa principale del problema poiché è probabile che crei altri problemi che non sono ancora stati identificati (o si è lavorato attorno senza accorgersene).

+0

+1, e puoi anche aggiungere file JS nell'implementazione 'hook_init()' o 'hook_preprocess()' o 'hook_preprocess_page()' (o hook simili). – Sk8erPeter

Problemi correlati