Frage

Was ist die beste Methode, eine CSS oder Javascript-Datei für einen bestimmten Knoten in Drupal 6 mitgeschickt werden soll.

Ich mag eine Seite auf meiner Website erstellen, die eine wenig Javascript-Anwendung ausgeführt hat, so dass die CSS und Javascript, ist zu dieser Seite spezifische und möchten nicht in anderer Seite geladen aufgenommen werden.

War es hilfreich?

Lösung 4

Die beste Lösung, die ich mit so habe kommen weit ist die PHP-Eingabemodus zu aktivieren, und dann rufen Sie drupal_add_css und drupal_add_js gegebenenfalls in einem Block in der PHP Start des Körpers des Knotens.

Andere Tipps

Ich würde davon abraten, mit hook_nodeapi dafür. Hinzufügen von CSS und Javascript in Bezug auf das Layout so hook_nodeapi nicht der richtige Ort für sie ist: verwenden themeing. Auf dieses Weisen Sie kann die Dateien überschreiben, wenn Sie ein neues Thema entwickeln werden. Dadurch, dass mit dem nodeapi Ansatz wäre ein bisschen härter sein (Sie würden die js / css-Liste für die Dateien suchen müssen, entfernen Sie diese und ersetzen Sie sie mit Ihrem eigenen).

Wie auch immer: Was Sie tun müssen, ist einen Knoten Vorprozess Funktion hinzufügen, die diese Dateien für Sie erstellt. Sie können dies entweder in einem Modul oder in einem benutzerdefinierten Thema. 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");
  }
}

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

Diese Funktionen aufgerufen werden, bevor die Knoten Themen werden. Specifing die js / css es ermöglicht eine kaskadierte Ansatz. Sie generic / grundlegende Dinge im Modul und bieten verbesserte oder bestimmte Funktionen in dem Thema haben kann

Ich verwende die Vorprozess Funktionen aber einige Probleme hat. $variables['styles'] ist in der Regel eingestellt vor die Knoten Vorprozess Funktion aufgerufen wird. Mit anderen Worten wird drupal_get_css bereits aufgerufen, die Sie macht Aufruf drupal_add_css nutzlos. Das gleiche gilt für drupal_add_js. Ich arbeite, um dieses durch den $variables['styles'] Wert zurückgesetzt wird.

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

Das scheint für die meisten Fälle zu arbeiten.

P. S. Es gibt kaum braucht jede jemals ein Modul erstellen Thematisierung Problem zu lösen.

Prost.

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 Eingabemöglichkeit zur Verfügung. Wie habe ich es kleines jQuery zwickt in ein paar Admin-Seiten zu injizieren. Es funktioniert durch Pfad anstatt Knoten-ID.

Das sollte es tun - ein Quickie Modul, das das hook_nodeapi die JS / CSS einfügen, wenn der Knoten betrachtet 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 Sicherheitsprobleme mit den PHP-Eingangsfilter ermöglichen, und keine separate Knoten Vorlagendatei erfordern, die veralten könnten, wenn Sie den Hauptknoten Vorlage aktualisiert und vergessen Sie Ihre individuelle ein.

Sie können ein eigenes Template haben für diesen Knoten (Node-needsjs.tpl.php), die die JavaScript-Aufrufe. Das ist ein wenig sauberer als PHP direkt im Knotenkörper verwendet wird, und macht Änderungen leichter Inhalt in der Zukunft.

EDIT: Ich glaube nicht, war ich über sehr klar. Sie wollen, dass die Vorlagendatei node- (nodeid) .tpl.php nennen. Also, wenn es Knoten 1, die Datei Knoten-1.tpl.php nennen ist

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top