Pergunta

Qual é o melhor método para incluir um arquivo CSS ou Javascript para um nó específico no Drupal 6.

Quero criar uma página em meu site que tenha um pequeno aplicativo javascript em execução, para que o CSS e o javascript sejam específicos dessa página e não queiram ser incluídos em outros carregamentos de página.

Foi útil?

Solução 4

A melhor solução que encontrei até agora é ativar o modo de entrada do PHP e depois chamar drupal_add_css e drupal_add_js conforme apropriado em um bloco PHP no início do corpo do seu nó.

Outras dicas

Eu desaconselho o uso hook_nodeapi por isso.Adicionar CSS e Javascript está relacionado ao layout, então hook_nodeapi não é o lugar para isso:use temas.Desta forma, você pode substitua esses arquivos quando for desenvolver um novo tema.Fazer isso com a abordagem nodeapi seria um pouco mais difícil (você teria que pesquisar os arquivos na lista js/css, removê-los e substituí-los pelos seus).

De qualquer forma:o que você precisa fazer é adicionar uma função de pré-processamento de nó que adicione esses arquivos para você.Você pode fazer isso em um módulo ou em um tema personalizado.Para um módulo seria:

function mymodule_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . "/file.js", "module");
    drupal_add_css(drupal_get_path('module', 'mymodule') . "/file.css", "module");
  }
}

ou para um tema:

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
  }
}

Não se esqueça de limpar o cache primeiro.

Essas funções são chamadas antes do nó receber o tema.Especificar o js/css permite uma abordagem em cascata:você pode ter o material genérico/básico no módulo e fornecer funcionalidades aprimoradas ou específicas no tema.

Eu uso as funções de pré-processamento, mas isso apresenta alguns problemas. $variables['styles'] geralmente é definido antes a função de pré-processamento do nó é chamada.Em outras palavras drupal_get_css já está chamado, o que faz você ligar drupal_add_css inútil.O mesmo vale para drupal_add_js.Eu resolvo isso redefinindo o $variables['styles'] valor.

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
    $variables['styles'] = drupal_get_css();
    $variables['script'] = drupal_get_js();
  }
}

Isso parece funcionar na maioria dos casos.

P.S.Quase não há necessidade de criar um módulo para resolver um problema de tema.

Saúde.

Esta parece ser uma boa solução:

http://drupal.org/project/js_injectorehttp://drupal.org/project/css_injector

Funciona quando você deseja inserir código embutido em algo que não seja tecnicamente um nó, para que não haja ID de nó e nenhuma opção de entrada PHP disponível.Como eu usei para injetar pequenos ajustes de jQuery em algumas páginas de administração.Funciona por caminho e não por ID do nó.

Isso deve funcionar - um módulo rápido que usa o hook_nodeapi para inserir o JS/CSS quando o nó for visualizado.

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  // the node ID of the node you want to modify
  $node_to_modify = 6;

  // do it!
  if($op == 'view' && $node->nid == $node_to_modify) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
  }
}

Isso evita problemas de segurança ao ativar o filtro de entrada PHP e não requer um arquivo de modelo de nó separado, que pode ficar desatualizado se você atualizar o modelo de nó principal e esquecer o modelo personalizado.

Você pode ter um modelo personalizado para esse nó (node-needsjs.tpl.php) que chama o javascript.Isso é um pouco mais limpo do que usar PHP diretamente no corpo do nó e facilita as alterações no conteúdo no futuro.

EDITAR: Acho que não fui muito claro acima.Você deseja nomear o arquivo de modelo node-(nodeid).tpl.php.Então se for o Nó 1, chame o arquivo node-1.tpl.php

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top