Wie füge ich nur der Startseite einen JavaScript-Block hinzu?

8

Ich habe einen JavaScript-Block, den ich meiner Homepage (und nur meiner Homepage) hinzufügen muss, um die Protokollierung von Klicks über einen Heatmapping-Dienst zu ermöglichen, für den ich mich angemeldet habe.

Sie haben den Code angegeben, der direkt vor dem </body>Tag platziert werden muss, aber ich kann mir vorstellen, dass es sicher ist, ihn irgendwo innerhalb des <body>Tags zu platzieren.

Ich möchte, dass das Snippet nicht auf anderen Seiten angezeigt wird. Wie kann ich das erreichen?

Ich verwende Drupal 6.

PHLAK
quelle

Antworten:

15

Wenn Sie unter Startseite die Startseite verstehen, können Sie diese hook_preprocess_page()in einem benutzerdefinierten Modul implementieren .

function mymodule_preprocess_page(&$variables) {
  if ($variables['is_front']) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');
    $variables['scripts'] = drupal_get_js();
  }
}

Auf Drupal 7 funktioniert derselbe Code wie $variables['is_front']in _template_preprocess_default_variables () (aufgerufen von template_preprocess () ) unter Verwendung des folgenden Codes.

  // drupal_is_front_page() might throw an exception.
  try {
    $variables['is_front'] = drupal_is_front_page();
  }
  catch (Exception $e) {
    // If the database is not yet available, set default values for these
    // variables.
    $variables['is_front'] = FALSE;
    $variables['db_is_active'] = FALSE;
  }

Der Grund für den drupal_add_js()ersten Aufruf und dann drupal_get_js()ist, dass für den Fall, dass ein anderes Modul, das danach ausgeführt wird, den folgenden Code ausführen würde, die JavaScript-Datei weiterhin hinzugefügt wird.

function quite_a_different_module_preprocess_page(&$vars) {
  drupal_add_js(drupal_get_path('module', 'quite_a_different_mymodule') . '/quite_a_different_module.js');
  $vars['scripts'] = drupal_get_js();
}

Mit drupal_add_js()wird die Datei zu der von drupal_get_js () zurückgegebenen Ausgabe hinzugefügt .

kiamlaluno
quelle
Das sieht gut aus, werde es ausprobieren.
PHLAK
Dies funktioniert gut, um das JS in den Header aufzunehmen, aber gibt es eine Möglichkeit, es in den Body einzufügen?
PHLAK
1
@PHLAK Um es in den Body einzufügen, fügen Sie einfach ein <script>Tag in den HTML-Body ein.
Kiamlaluno
Ich konnte das erreichen, was ich brauchte, indem ich am Ende der Seite einen Inhaltsblock hinzufügte und ihn so beschränkte, dass er nur auf der <front>Seite angezeigt wurde. Diese Lösung ist auch gut, aber nicht für die Situation, in der ich war. Danke.
PHLAK
6

Wenn der Code in den Kopfbereich gelangen kann, fügen Sie die folgende Funktion in Ihre template.php ein.

function MYTHEME_preprocess_page (&$vars) {
  if ($vars['is_front']) {
    $vars['scripts'] .= "// my JS for the home page";
  }
}

Sie können auch den folgenden Code an der entsprechenden Stelle Ihrer page.tpl.php hinzufügen.

<?php if ($is_front): ?>
  // JS goes here
<?php endif; ?>

Es gibt andere Möglichkeiten, dies zu erreichen, aber dies ist wahrscheinlich die einfachste.

mpdonadio
quelle
-3

In Drupal 7, wenn Sie die js in das Tag mit dem aufnehmen möchten

Die letzte Lösung, die Datei, die Sie ändern müssen, nachdem Sie sie aus dem Systemordner in Ihr Design kopiert haben, lautet html.tpl.php .

Nicht streng nach Drupal, sondern funktioniert

Saropatzi
quelle