Domanda

voglio caricare uno script esterno in <head>. E 'specifico modulo in modo voglio che il mio modulo di prendersi cura del carico.

In Drupal 6, funzione drupal_add_js() non permette di aggiungere una esterna script <head>. Sarà disponibile in Drupal 7 passando l'argomento "external" alla funzione. In D6, posso usare drupal_set_html_head() invece , ma inserisce il data dati all'inizio del <head> che io non voglio. Mi piacerebbe aggiungere dati in esso .

Si è scoperto che drupal_html_set_head() aggiunge i dati.

$stored_head .= $data ."\n";

Quindi il comportamento Ho sperimentato - i dati sono stati inseriti all'inizio dei dati di testa -. Dovrebbe venire da che io chiamo drupal_html_set_head() nella funzione hook_init() di mio modulo

Come posso aggiungere dati al <head> molto e di?

È stato utile?

Soluzione

Il valore predefinito page.tpl.php (lo si può trovare in /modules/system/page.tpl.php è questo:

<head>
  <title><?php print $head_title; ?></title>
  <?php print $head; ?>
  <?php print $styles; ?>
  <?php print $scripts; ?>
  <script type="text/javascript"><?php /* Needed to avoid Flash of Unstyled Content in IE */ ?> </script>
</head>

Quando si effettua drupal_set_html_head() è aggiungendo roba da $head variabile, ma ancora ci sono più variabili allegati, come si vede.

Una soluzione possibile è quella di accodare la roba che si desidera $scripts, invece di $head.

Come?

con una funzione di pre-elaborazione dal modulo:

function MYMODULE_preprocess_page(&$variables) {
    $variables['scripts'] .= $your_stuff;
}

non ho provato questa soluzione, ma se non funziona forse è perché l'ordine di esecuzione. Prova a impostare il peso del modulo superiore, in modo che verrà eseguito dopo il system_preprocess_page.

Altro motivo per cui potrebbe non funzionare è perché il tema è la stampa le variabili in ordine diverso in page.tpl.php . Ma non si può controllare questo dal codice di un modulo.

Altri suggerimenti

Ci sono molteplici soluzioni per aggirare il problema.

  • uso hook_footer () per aggiungere i js al piè di pagina
  • fare un piccolo script jQuery, che crea l'elemento <script> e lo aggiunge al <head>
  • farlo con una funzione template pre-elaborazione
  • rendere il proprio page.tpl.php

Drupal usa l'operatore .= per creare la variabile $head. Il $js e $css è mantenuto in un array, e ti permette di essere ri-orderd. $head è una stringa, e non può essere ri-orderd, othern poi da hack soggette a errori brutte. Come le esplosioni espressioni regolari, riordino e implosione.

$heads = preg_explode("\n", $head);
ksort($heads);
$head = implode("\n", $heads);

a variabili pre-processore del vostro tema.

Hai visto questo commento ?

  

Attenzione quando si utilizza questo per impostare una chiamata di file js esterna in D6, ad esempio:

     

drupal_set_html_head ( '');

     

Se non si include un tag di chiusura completo di script (ad esempio), lo farà   rompere in Firefox (ed eventualmente altri browser, quelli basati su WebKit sembrano   bene). Il tag non riuscirà a chiudere, e spazzerà via tutte le altre intestazioni   fino al prossimo tag disponibili. Questo di solito si traduce in tutto   i file CSS non riuscendo a carico, più il file js successivo pienamente-tag. Così   utilizzare questo modulo invece:

     

drupal_set_html_head ( '');

     

Questo vale fino al Drupal 6.16. È possibile superarla in   D7 con la nuova opzione esterna in drupal_add_js.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top