Pregunta

Quiero cargar un script externo en <head>. Es módulo específico por lo que yo quiero que mi módulo de cuidar de la carga.

En Drupal 6, la función drupal_add_js() no permite añadir una externa guión en <head>. Estará disponible en Drupal 7 pasar el argumento "external" a la función. En D6, que se puede utilizar drupal_set_html_head() lugar, pero inserta el dada datos en el comienzo de la <head> la que no quiero. Me gustaría añadir datos en ella .

Resultó que drupal_html_set_head() añade datos.

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

Así que el comportamiento que experimentó - los datos se insertan en el principio de los datos de la cabeza -. Debe venir de esa llamada drupal_html_set_head() I en función de hook_init() de mi módulo

¿Cómo puedo añadir datos a la <head> muy y de?

¿Fue útil?

Solución

El valor por defecto page.tpl.php (se puede encontrar en /modules/system/page.tpl.php es la siguiente:

<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>

Cuando haces drupal_set_html_head() se anexando cosas para $head variable, pero aún hay más variables adjuntas como ves.

Una solución posible es añadir las cosas que desea $scripts, en lugar de $head.

¿Cómo?

con una función de preproceso de su módulo:

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

que no lo probamos esta solución, pero si no funciona tal vez es porque el orden de ejecución. Tratar de establecer el peso de su módulo más alto, para que se ejecute después el system_preprocess_page.

Otra razón por la cual no puede trabajar es porque el tema es la impresión de las variables en orden diferente en page.tpl.php . Pero no se puede controlar esto desde el código de un módulo.

Otros consejos

Existen múltiples soluciones para solucionar el problema.

  • Uso hook_footer () para añadir el js al pie de página
  • hacer un pequeño script de jQuery, que crea el elemento <script> y lo añade a <head>
  • hacerlo con una función de plantilla preproceso
  • hacer su propio page.tpl.php

Drupal usa el operador .= para crear la variable $head. El $js y $css se mantiene en una matriz, y le permite ser re-orderd. $head es una cadena, y no puede ser re-orderd, othern luego por los cortes feos, propensos a errores. Tales como las explosiones de expresión regular, reordenación y implosión.

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

en el pre-procesador de la variable de su tema.

¿Has visto este comentario ?

  

Tenga cuidado al usar esta función para establecer una llamada js externa en D6, por ejemplo:

     

drupal_set_html_head ( '');

     

Si no se incluye una etiqueta de cierre completo de la escritura (es decir), lo hará   romper en Firefox (y posiblemente otros navegadores, los basados ??en webkit parecen   multa). La etiqueta dejará de cerrar, y acabará con cualquier otro encabezados   hasta la siguiente etiqueta disponible. Esto usualmente resulta en todo   los archivos CSS en su defecto a la carga, más el archivo js próxima etiquetado completamente. Entonces   utilizar esta forma en su lugar:

     

drupal_set_html_head ( '');

     

Esto se aplica hasta e incluyendo Drupal 6.16. Se puede superar en   D7 con la nueva opción externa en drupal_add_js.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top