Adicione JavaScript a um tipo de conteúdo específico

9

Gostaria de saber qual é a melhor maneira de adicionar um arquivo JavaScript a uma página específica, com base no tipo de conteúdo. Por exemplo, eu quero adicionar isso:

<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false'></script>

Até agora, o que fiz foi usar essa maneira para adicionar ao meu tipo de conteúdo específico. Para o tipo de conteúdo map_page, eu adiciono as duas linhas de código abaixo na página - map_page.tpl.php.

drupal_add_js("http://maps.google.com/maps/api/js?sensor=false", 'external');
$scripts = drupal_get_js();

Existe alguma outra maneira melhor? se possível pode dar um exemplo, atualmente não entendo muito bem ...

Arkchong
fonte

Respostas:

6

Não posso comentar sobre o equivalente adequado do Drupal 7, mas nos sites do Drupal 6 faço isso em uma página template_preprocess_ .

Terei alguma lógica para tomar a decisão (com base em arg()ou a page_manager_get_current_page()partir de painéis) e, em seguida, prefixo $vars["scripts"]com o script externo. Eu prefixo para não ter problemas de dependência com nenhum script local.

Às vezes, também configurarei uma nova região chamada $global_scriptsde pensamento como API do Google e SWFObject que desejo carregar de uma CDN, e isso é impresso antes $scriptsno modelo da página.

Para ser sincero, embora eu normalmente tenha todo o JS em todas as páginas, para que os arquivos sejam armazenados em cache.

mpdonadio
fonte
6

Como o Drupal não permite que você redefina template_preprocess_node(porque já está definido no node.module), adicionei uma função de pré-processador no meu módulo personalizado:

function mymodule_preprocess_node(&$vars) {
  if ($vars['type'] == 'my-node-type') {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/myjs.js');
  }
}

Eu usei, preprocess_nodee não preprocess_pageporque é mais fácil chegar ao tipo de nó. Se você realmente fizer referência a um arquivo javascript, ele será automaticamente armazenado em cache ( consulte a seção Parâmetros ).

Juke-box
fonte
2

você também pode usar a verificação hook_node_view para o tipo de conteúdo e, em seguida, adicionar os js da maneira que você já está fazendo.

OU

Se você tiver um campo que produza as informações que usarão o JS, use um pré-processador para adicionar os js, portanto, o js include depende do campo que exibe o mapa e não do tipo de conteúdo.

Jeremy French
fonte
0

Uma solução simples é colocar apenas o add_js:

  drupal_add_js('drupal_get_path('module', 'mymodule') . '/myjs.js');

na página / nó template.php.

Nevos
fonte