¿Cómo agrego un bloque de JavaScript solo a la página de inicio?

8

Tengo un bloque de JavaScript que necesito agregar a mi página de inicio (y solo a mi página de inicio) para permitir el registro de clics a través de un servicio de mapeo térmico en el que me inscribí.

Especificaron que el código debía colocarse justo antes de la </body>etiqueta, pero imagino que es seguro colocarlo en cualquier lugar dentro de la <body>etiqueta.

Me gustaría que el fragmento no aparezca en ninguna otra página. ¿Cómo puedo lograr esto?

Estoy ejecutando Drupal 6.

PHLAK
fuente

Respuestas:

15

Si por página de inicio te refieres a la página principal, puedes implementarla hook_preprocess_page()en un módulo personalizado.

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

El mismo código funciona en Drupal 7, como $variables['is_front']se establece en _template_preprocess_default_variables () (llamado desde template_preprocess () ), usando el siguiente código.

  // 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 razón de llamar drupal_add_js()primero, y luego drupal_get_js()es que, en el caso de que otro módulo que se ejecute después ejecute el siguiente código, el archivo JavaScript aún se agregará.

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

Usando drupal_add_js(), el archivo se agregará a la salida devuelta por drupal_get_js () .

kiamlaluno
fuente
Esto se ve bien, lo probaré.
PHLAK
Esto funciona bien para incluir el JS en el encabezado, pero ¿hay alguna manera de ponerlo en el cuerpo?
PHLAK
1
@PHLAK Para ponerlo en el cuerpo, simplemente agregue una <script>etiqueta en el cuerpo HTML.
kiamlaluno
Pude lograr lo que necesitaba al agregar un bloque de contenido al final de la página y limitarlo para que solo se muestre en la <front>página. Esta solución también es buena, pero no para la situación en la que estaba. Gracias.
PHLAK
6

Si el código puede ir en la sección de cabecera, agregue la siguiente función en su template.php.

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

También puede agregar el siguiente código, en el lugar apropiado de su page.tpl.php.

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

Hay otras formas de lograr esto, pero esta es probablemente la más fácil.

mpdonadio
fuente
-3

En Drupal 7 si desea incluir el js en la etiqueta con el

última solución, el archivo que debe modificar, después de copiarlo dentro de su tema desde la carpeta del sistema, es html.tpl.php .

No estrictamente a la manera de Drupal pero funciona

saropatzi
fuente