Como adiciono um bloco de JavaScript apenas à página inicial?

8

Tenho um bloco de JavaScript que preciso adicionar à minha página inicial (e somente à minha página inicial) para permitir o registro de cliques por meio de um serviço de mapeamento térmico que me inscrevi.

Eles especificaram o código necessário para ser colocado logo antes da </body>tag, mas acho que é seguro colocá-lo em qualquer lugar dentro da <body>tag.

Gostaria que o trecho não aparecesse em nenhuma outra página. Como posso fazer isso?

Estou executando o Drupal 6.

PHLAK
fonte

Respostas:

15

Se por home page você se refere à primeira página, é possível implementar hook_preprocess_page()em um 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();
  }
}

O mesmo código funciona no Drupal 7, conforme $variables['is_front']definido em _template_preprocess_default_variables () (chamado de template_preprocess () ), usando o código a seguir.

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

O motivo da chamada drupal_add_js()primeiro e, em seguida, drupal_get_js()é que, no caso de outro módulo executado após executar o código a seguir, o arquivo JavaScript ainda será adicionado.

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(), o arquivo será adicionado à saída retornada por drupal_get_js () .

kiamlaluno
fonte
Isso parece bom, vai tentar.
PHLAK 06/06
Isso funciona bem para incluir o JS no cabeçalho, mas existe uma maneira de colocá-lo no corpo?
PHLAK
11
@PHLAK Para colocar no corpo, basta adicionar uma <script>tag no corpo HTML.
kiamlaluno
Consegui realizar o que precisava adicionando um bloco de conteúdo no final da página e limitando-o a ser exibido apenas na <front>página. Essa solução também é boa, mas não para a situação em que eu estava. Obrigado.
PHLAK
6

Se o código puder ir na seção principal, adicione a seguinte função no seu template.php.

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

Você também pode adicionar o código a seguir, no local apropriado da sua página.tpl.php.

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

Existem outras maneiras de conseguir isso, mas isso é provavelmente o mais fácil.

mpdonadio
fonte
-3

No Drupal 7, se você deseja incluir os js na tag com o

Como última solução, o arquivo que você precisa modificar, após copiá-lo para o seu tema da pasta do sistema, é html.tpl.php .

Não estritamente da maneira Drupal, mas funciona

saropatzi
fonte