Comment ajouter un bloc de JavaScript à la page d'accueil uniquement?

8

J'ai un bloc de JavaScript que je dois ajouter à ma page d'accueil (et seulement ma page d'accueil) pour permettre l'enregistrement des clics via un service de cartographie thermique auquel je me suis inscrit.

Ils ont spécifié que le code devait être placé juste avant la </body>balise, mais j'imagine qu'il est sûr de le mettre n'importe où dans la <body>balise.

Je souhaite que l'extrait n'apparaisse sur aucune autre page. Comment puis-je accomplir cela?

J'utilise Drupal 6.

PHLAK
la source

Réponses:

15

Si par page d'accueil vous entendez la première page, vous pouvez l'implémenter hook_preprocess_page()dans un module personnalisé.

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

Le même code fonctionne sur Drupal 7, comme il $variables['is_front']est défini dans _template_preprocess_default_variables () (appelé depuis template_preprocess () ), en utilisant le code suivant.

  // 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;
  }

La raison de l'appel en drupal_add_js()premier, puis drupal_get_js()est que, dans le cas où un autre module exécuté après exécuterait le code suivant, le fichier JavaScript serait toujours ajouté.

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();
}

En utilisant drupal_add_js(), le fichier sera ajouté à la sortie renvoyée par drupal_get_js () .

kiamlaluno
la source
Cela a l'air bien, je vais l'essayer.
PHLAK
Cela fonctionne bien pour inclure le JS dans l'en-tête, mais existe-t-il un moyen de le mettre dans le corps?
PHLAK
1
@PHLAK Pour le mettre dans le corps, il suffit d'ajouter une <script>balise dans le corps HTML.
kiamlaluno
J'ai pu accomplir ce dont j'avais besoin en ajoutant un bloc de contenu à la fin de la page et en le limitant à ne s'afficher que sur la <front>page. Cette solution est également bonne, mais pas pour la situation dans laquelle je me trouvais. Merci.
PHLAK
6

Si le code peut aller dans la section head, ajoutez la fonction suivante dans votre template.php.

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

Vous pouvez également ajouter le code suivant, à l'endroit approprié de votre page.tpl.php.

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

Il existe d'autres façons d'y parvenir, mais c'est probablement la plus simple.

mpdonadio
la source
-3

Dans Drupal 7 si vous souhaitez inclure les js dans la balise avec le

dernière solution, le fichier que vous devez modifier, après l'avoir copié dans votre thème depuis le dossier système, est html.tpl.php .

Pas strictement la façon Drupal mais fonctionne

saropatzi
la source