Frage

Ich möchte ein externes Skript in <head> laden. Es ist modulspezifische, damit ich mein Modul möchte das Laden kümmern.

In Drupal 6, Funktion drupal_add_js() erlaubt es nicht, eine externe hinzufügen Skript in <head>. Er ist erhältlich Drupal 7 das "external" Argument an die Funktion übergeben. In D6, kann ich drupal_set_html_head() statt, aber es fügt die Daten am Anfang des <head> gegeben, die ich nicht will. Ich möchte darin Daten anhängen .

Es stellte sich heraus, dass drupal_html_set_head() anhängt Daten.

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

So das Verhalten Ich experimentierte - Daten am Anfang der Kopfdaten eingefügt wurden -. Kommen soll, dass ich Anruf drupal_html_set_head() in hook_init() Funktion meines Moduls

Wie kann ich Daten anhängen an die sehr und von <head>?

War es hilfreich?

Lösung

Der Standard page.tpl.php (Sie es finden können /modules/system/page.tpl.php ist diese:

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

Wenn Sie machen drupal_set_html_head() es Sachen variable $head ist anhängt, aber immer noch gibt es mehr Variablen angehängt, wie Sie sehen.

Eine mögliche Lösungen ist das Zeug anzufügen, dass Sie $scripts wollen, statt $head.

Wie?

mit einer Vorprozess Funktion von Ihrem Modul:

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

Ich habe nicht versucht, diese Lösung, aber wenn nicht, vielleicht arbeiten, weil die Reihenfolge der Ausführung. Versuchen Sie Ihr Modul das Gewicht höher zu setzen, so dass es laufen wird nach die system_preprocess_page.

Weiterer Grund, warum kann nicht arbeiten, weil das Thema die Variablen druckt in einer anderen Reihenfolge in page.tpl.php . Sie können dies aber nicht kontrollieren, aus dem Code eines Moduls.

Andere Tipps

Es gibt mehrere Lösungen zu arbeiten, um das Problem.

  • Verwendung hook_footer (), um die js in die Fußzeile hinzuzufügen
  • machen ein kleines jquery Skript, das das <script> Element erzeugt und fügt sie <head>
  • tut es mit einer Vorlage Vorprozess Funktion
  • machen Sie Ihre eigenen page.tpl.php

Drupal nutzt die .= Bediener die $head Variable zu erstellen. Die $js und $css wird in einer Reihe gehalten, und ermöglicht es Ihnen, wieder orderd zu sein. $head ein String ist, und kann nicht wieder bestellt werden, othern dann durch hässlich, fehleranfällig Hacks. Wie reguläre Ausdrücke Explosionen, Nachbestellung und Implosion.

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

in Ihrem Thema der Variablen Pre-Prozessor.

Haben Sie sehen diese Kommentar ?

Hüten Sie sich vor, wenn diese mit einem externen js Dateiaufruf in D6 zu setzen, zum Beispiel:

drupal_set_html_head ( '');

Wenn Sie sind kein vollständiges Skript schließenden Tag (dh), wird es brechen in Firefox (und möglicherweise auch andere Browser, Webkit-basierte diejenigen scheinen fein). Der Tag wird schließen scheitern, und werden alle anderen Header auslöschen bis zum nächsten verfügbaren Tag. Dies führt in der Regel in allen Ihre CSS-Dateien zu laden Fehler, plus die nächsten voll markiert js Datei. So Verwenden Sie dieses Formular statt:

drupal_set_html_head ( '');

Dies gilt bis einschließlich Drupal 6.16. Sie können es überwinden D7 mit der neuen externen Option in drupal_add_js.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top