2008-09-14 4 views
23

Was ein CSS oder Javascript-Datei für einen bestimmten Knoten in Drupal ist die beste Methode 6. für einschließlichFügen Sie CSS oder Javascript-Datei für bestimmte Knoten in Drupal 6

Ich möchte eine Seite auf meiner Website erstellen, die eine hat kleine JavaScript-Anwendung läuft, so dass das CSS und Javascript für diese Seite spezifisch ist und nicht in andere Seitenladungen einbezogen werden soll.

Antwort

3

Die beste Lösung, die ich bisher gefunden habe, ist, den PHP-Eingabemodus zu aktivieren, und dann drupal_add_css und drupal_add_js entsprechend in einem PHP-Block am Anfang des Rumpfes Ihres Knotens anzurufen.

+0

Ich habe diese Technik immer und immer wieder in Drupal 5 verwendet. Zum Beispiel wurde der "Club-Kalender" auf der ersten Seite dieser Seite auf diese Weise implementiert. http://www.chesmontastro.org/ –

+4

Dies könnte die einfachste Lösung sein, wird aber schnell unwartbar, da das Speichern von PHP-Code in der Datenbank sehr schwer zu debuggen ist und eine Versionskontrolle nahezu unmöglich ist. Die obige Lösung von Inferis ist ein viel sauberer Ansatz. – jhedstrom

0

Sie können eine benutzerdefinierte Vorlage für diesen Knoten haben (node-needsjs.tpl.php), die das Javascript aufruft. Das ist ein wenig sauberer als die Verwendung von PHP direkt im Node-Hauptteil und macht Änderungen an Inhalten in Zukunft einfacher.

EDIT: Ich glaube nicht, dass ich oben sehr klar war. Sie möchten die Template-Datei node- (nodelid) .tpl.php nennen. Also, wenn es Knoten 1 war, rufen Sie die Datei node-1.tpl.php

+0

Ich hätte diese Antwort wirklich besser finden sollen - ein weiterer Vorteil der Verwendung einer benutzerdefinierten Vorlagendatei ist die Möglichkeit, andere Knoten zu zwingen, die Vorlage über die Funktion template_preprocess_page in template.php zu verwenden. – MattBelanger

2

Dies sollte den Trick tun - ein Quickie-Modul, das die hook_nodeapi verwendet, um die JS/CSS einfügen, wenn der Knoten angezeigt wird.

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

Dies vermeidet Probleme mit der Sicherheit ermöglicht die PHP-Eingangsfilter, und benötigt keinen separaten Knoten Template-Datei, die veralten können, wenn Sie den Hauptknoten Vorlage aktualisiert und vergessen haben, über Ihre individuelle ein.

14

Ich würde davon abraten, hook_nodeapi dafür zu verwenden. Das Hinzufügen von CSS und Javascript bezieht sich auf das Layout, also ist hook_nodeapi nicht der richtige Ort dafür: Verwenden Sie Theme. Auf diese Weise können Sie diese Dateien überschreiben, wenn Sie ein neues Thema entwickeln. Dies mit dem nodeapi-Ansatz zu tun wäre ein bisschen schwieriger (Sie müssten die js/css-Liste nach den Dateien durchsuchen, sie entfernen und sie durch Ihre eigenen ersetzen).

Wie auch immer: was Sie tun müssen, ist eine Knoten Preprocess-Funktion, die diese Dateien für Sie hinzufügt. Sie können dies entweder in einem Modul oder in einem benutzerdefinierten Thema tun. Für ein Modul dies wäre:

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

oder für ein Thema:

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

Sie den Cache zu löschen, zuerst nicht vergessen.

Diese Funktionen werden aufgerufen, bevor der Knoten thematisch ist. Das Spezifizieren der js/css erlaubt einen kaskadierten Ansatz: Sie können die generischen/grundlegenden Sachen im Modul haben und verbesserte oder spezifische Funktionalität im Thema zur Verfügung stellen.

+0

Geringfügige Korrektur: Wenn Sie ein CSS in einem Design hinzufügen, müssen Sie die Formatvariable nach dem Aufruf von drupal_add_css aktualisieren, z. $ Variablen ['Stile'] = drupal_get_css(); – Pianosaurus

5

Ich benutze die Vorverarbeitungsfunktionen, aber das hat einige Probleme. $variables['styles'] wird normalerweise vor der Knoten Vorverarbeitungsfunktion aufgerufen wird. Mit anderen Worten: wird bereits aufgerufen, wodurch Sie drupal_add_css unbrauchbar machen. Das gleiche gilt für drupal_add_js. Ich arbeite um dieses Problem, indem ich den $variables['styles'] Wert zurücksetze.

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

Dies scheint für die meisten Fälle zu funktionieren.

P.S.Es ist kaum notwendig, ein Modul zu erstellen, um ein Thematisierungsproblem zu lösen.

Prost.

4

Dies scheint eine gute Lösung:

http://drupal.org/project/js_injector und http://drupal.org/project/css_injector

Es funktioniert, wenn Sie andere Inline-Code in etwas einfügen wollen als technisch einen Knoten so gibt es keine Knoten-ID und keine PHP Eingabeoption verfügbar. Wie ich es verwendet habe, um kleine jQuery Tweaks in ein paar Admin-Seiten zu injizieren. Es funktioniert nach Pfad und nicht nach Knoten-ID.

Verwandte Themen