Domanda

Qual è il metodo migliore per includere un file CSS o Javascript per un nodo specifico in Drupal 6.

Voglio creare una pagina sul mio sito che abbia una piccola applicazione javascript in esecuzione, quindi CSS e javascript sono specifici per quella pagina e non vorrebbero essere inclusi nel caricamento di altre pagine.

È stato utile?

Soluzione 4

La soluzione migliore che ho trovato finora è abilitare la modalità di input PHP e quindi chiamare drupal_add_css E drupal_add_js come appropriato in un blocco PHP all'inizio del corpo del tuo nodo.

Altri suggerimenti

Ne sconsiglierei l'utilizzo hook_nodeapi per quello.L'aggiunta di CSS e Javascript è quindi correlata al layout hook_nodeapi non è il posto adatto:utilizzare la tematizzazione.In questo modo, tu Potere sovrascrivi questi file quando svilupperai un nuovo tema.Farlo con l'approccio nodeapi sarebbe un po' più difficile (dovresti cercare i file nell'elenco js/css, rimuoverli e sostituirli con i tuoi).

Comunque:quello che devi fare è aggiungere una funzione di preelaborazione del nodo che aggiunga quei file per te.Puoi farlo in un modulo o in un tema personalizzato.Per un modulo questo sarebbe:

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

o per un 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");
  }
}

Non dimenticare di svuotare prima la cache.

Queste funzioni vengono chiamate prima che al nodo venga assegnato un tema.Specificare js/css consente un approccio a cascata:puoi avere elementi generici/di base nel modulo e fornire funzionalità avanzate o specifiche nel tema.

Utilizzo le funzioni di preelaborazione ma questo presenta alcuni problemi. $variables['styles'] di solito è impostato Prima viene chiamata la funzione di preelaborazione del nodo.In altre parole drupal_get_css è già chiamato, il che ti fa chiamare drupal_add_css inutile.Lo stesso vale per drupal_add_js.Risolvo questo problema reimpostando il file $variables['styles'] valore.

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

Questo sembra funzionare nella maggior parte dei casi.

PSNon c'è quasi mai bisogno di creare un modulo per risolvere un problema tematico.

Saluti.

Questa sembra una buona soluzione:

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

Funziona quando si desidera inserire codice in linea in qualcosa di diverso da tecnicamente un nodo, quindi non è disponibile alcun ID nodo e nessuna opzione di input PHP.Ad esempio, l'ho usato per inserire piccole modifiche jQuery in un paio di pagine di amministrazione.Funziona per percorso anziché per ID nodo.

Questo dovrebbe funzionare: un modulo rapido che utilizza il file hook_nodeapi per inserire il JS/CSS quando il nodo viene visualizzato.

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

Ciò evita problemi di sicurezza con l'abilitazione del filtro di input PHP e non richiede un file modello di nodo separato che potrebbe diventare obsoleto se aggiornassi il modello di nodo principale e dimentichi quello personalizzato.

Puoi avere un modello personalizzato per quel nodo (node-needsjs.tpl.php) che chiama javascript.È un po' più pulito rispetto all'utilizzo di PHP direttamente nel corpo del nodo e semplifica le modifiche future ai contenuti.

MODIFICARE: Non credo di essere stato molto chiaro sopra.Vuoi nominare il file modello node-(nodeid).tpl.php.Quindi, se fosse il Nodo 1, chiama il file node-1.tpl.php

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top