Come faccio ad aggiungere un blocco di JavaScript solo alla home page?


8

Ho un blocco di JavaScript che devo aggiungere alla mia homepage (e solo alla mia homepage) per abilitare la registrazione dei clic tramite un servizio di mappatura termica a cui mi sono registrato.

Hanno specificato che il codice doveva essere inserito appena prima del </body>tag, ma immagino che sia sicuro inserirlo in qualsiasi punto del <body>tag.

Vorrei che lo snippet non comparisse su altre pagine. Come posso ottenere questo?

Sto eseguendo Drupal 6.

Risposte:


15

Se per home page intendi la prima pagina, puoi implementarla hook_preprocess_page()in un modulo personalizzato.

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

Lo stesso codice funziona su Drupal 7, come $variables['is_front']impostato in _template_preprocess_default_variables () (chiamato da template_preprocess () ), usando il seguente codice.

  // 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 ragione per cui si chiama drupal_add_js()prima, e poi drupal_get_js()è che, nel caso in cui un altro modulo che viene eseguito dopo eseguisse il seguente codice, il file JavaScript verrebbe comunque aggiunto.

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

Utilizzando drupal_add_js(), il file verrà aggiunto all'output restituito da drupal_get_js () .


Sembra buono, lo proverò.
PHLAK,

Funziona bene includendo il JS nell'intestazione, ma c'è un modo per inserirlo nel corpo?
PHLAK,

1
@PHLAK Per inserirlo nel corpo, è sufficiente aggiungere un <script>tag nel corpo HTML.
kiamlaluno

Sono stato in grado di realizzare ciò di cui avevo bisogno aggiungendo un blocco di contenuti alla fine della pagina e limitandolo per mostrarlo solo sulla <front>pagina. Anche questa soluzione è buona, ma non per la situazione in cui mi trovavo. Grazie.
PHLAK,

6

Se il codice può andare nella sezione head, aggiungi la seguente funzione nel tuo template.php.

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

Puoi anche aggiungere il seguente codice, nella posizione appropriata di page.tpl.php.

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

Ci sono altri modi per farlo, ma questo è probabilmente il più semplice.


-3

In Drupal 7 se vuoi includere js nel tag con

ultima soluzione, il file che devi modificare, dopo averlo copiato nel tuo tema dalla cartella di sistema, è html.tpl.php .

Non rigorosamente alla maniera di Drupal ma funziona

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.