Includi file CSS o Javascript per un nodo specifico in Drupal 6
-
09-06-2019 - |
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.
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