Question

Je veux charger un script externe dans <head>. Il est spécifique le module, donc je veux que mon module prendre soin du chargement.

Dans Drupal 6, la fonction drupal_add_js() ne permet pas d'ajouter un externe script dans <head>. Il sera disponible dans Drupal 7 passant l'argument "external" à la fonction. Dans D6, je peux utiliser drupal_set_html_head() à la place, mais il insère le les données figurant dans le début de la <head> que je ne veux pas. Je voudrais ajouter des données dans ce .

Il est avéré que drupal_html_set_head() ajoute des données.

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

Alors le comportement que j'expérimenté - les données ont été insérées dans le début des données de tête -. Devraient provenir de cet appel, je drupal_html_set_head() dans la fonction hook_init() de mon module

Comment puis-je ajouter des données à tout et <head>?

Était-ce utile?

La solution

La valeur par défaut page.tpl.php (vous pouvez le trouver dans /modules/system/page.tpl.php est la suivante:

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

Lorsque vous faites drupal_set_html_head() il est des choses à $head Annexer des variables, mais il y a des variables plus jointes que vous voyez.

Une des solutions possibles consiste à ajouter les choses que vous voulez $scripts, au lieu de $head.

Comment?

avec une fonction de pré-traitement de votre module:

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

Je n'ai pas essayé cette solution, mais si ne fonctionne pas est peut-être parce que l'ordre d'exécution. Essayez de mettre plus de poids de votre module, il courra après le system_preprocess_page.

Autre raison pour laquelle ne peut pas fonctionner parce que le thème est l'impression des variables dans un ordre différent dans page.tpl.php . Mais vous ne pouvez pas contrôler ce à partir du code d'un module.

Autres conseils

Il existe plusieurs solutions pour contourner le problème.

  • utilisation hook_footer () pour ajouter les js au pied de page
  • faire un petit script jquery, ce qui crée l'élément <script> et l'ajoute à <head>
  • le faire avec une fonction de pré-traitement de modèle
  • faire votre propre page.tpl.php

Drupal utilise l'opérateur .= pour créer la variable $head. Le $js et $css est maintenu dans un tableau, et vous permet d'être re-orderd. $head est une chaîne, et ne peut pas être re-orderd, othern puis par laides, hacks sujettes à l'erreur. Tels que des explosions d'expressions régulières, réordonnancement et implosion.

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

dans le pré-processeur variable votre thème.

Avez-vous vu cette commentaire ?

  

Attention lorsque vous utilisez cette option pour définir un appel de fichier js externe D6, par exemple:

     

drupal_set_html_head ( '');

     

Si vous ne pas inclure une balise de fermeture de script complet (ie), il sera   briser dans Firefox (et éventuellement d'autres navigateurs, les WebKit semblent   bien). La balise ne parviendra pas à fermer, et efface tous les autres en-têtes   jusqu'à la prochaine balise disponible. Cela se traduit généralement par tous   vos fichiers CSS à la charge, à défaut ainsi que le fichier js suivant entièrement balisé. Donc   utiliser ce formulaire à la place:

     

drupal_set_html_head ( '');

     

Ceci est valable jusqu'au Drupal 6.16. Vous pouvez surmonter dans   D7 avec la nouvelle option externe drupal_add_js.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top