Fügen Sie JavaScript zu einem bestimmten Inhaltstyp hinzu

9

Ich möchte wissen, wie eine JavaScript-Datei am besten auf der Grundlage des Inhaltstyps zu einer bestimmten Seite hinzugefügt werden kann. Zum Beispiel möchte ich Folgendes hinzufügen:

<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false'></script>

Bisher habe ich auf diese Weise meinen spezifischen Inhaltstyp hinzugefügt. Für den Inhaltstyp map_page füge ich die folgenden zwei Codezeilen in page hinzu - map_page.tpl.php.

drupal_add_js("http://maps.google.com/maps/api/js?sensor=false", 'external');
$scripts = drupal_get_js();

Gibt es einen anderen besseren Weg? wenn möglich kann man ein beispiel geben, derzeit nicht wirklich gut verstehen ...

Arkchong
quelle

Antworten:

6

Ich kann das richtige Drupal 7-Äquivalent nicht kommentieren, aber auf Drupal 6-Sites mache ich dies auf einer template_preprocess_page .

Ich werde eine Logik haben, um die Entscheidung zu treffen (entweder basierend auf arg()oder page_manager_get_current_page()von Panels) und dann $vars["scripts"]mit dem externen Skript voranzustellen . Ich stelle vor, damit ich bei lokalen Skripten nicht auf Abhängigkeitsprobleme stoße.

Manchmal $global_scriptsrichte ich auch eine neue Region ein, die nach Gedanken wie Google API und SWFObject gefragt ist, die ich von einem CDN laden möchte. Diese wird zuvor $scriptsin der Seitenvorlage ausgedruckt .

Um ehrlich zu sein, obwohl ich normalerweise alle JS auf allen Seiten habe, damit die Dateien zwischengespeichert werden.

mpdonadio
quelle
6

Da Drupal Sie nicht neu definieren lässt template_preprocess_node(da es bereits in node.module definiert ist), habe ich meinem benutzerdefinierten Modul eine Präprozessorfunktion hinzugefügt:

function mymodule_preprocess_node(&$vars) {
  if ($vars['type'] == 'my-node-type') {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/myjs.js');
  }
}

Ich habe preprocess_nodeeher verwendet, als preprocess_pageweil es einfacher ist, zum Knotentyp zu gelangen. Wenn Sie tatsächlich auf eine Javascript-Datei verweisen, wird diese automatisch zwischengespeichert ( siehe Abschnitt Parameter ).

Jukebox
quelle
2

Sie können auch hook_node_view verwenden, um den Inhaltstyp zu überprüfen und dann die js so hinzuzufügen, wie Sie es bereits tun.

ODER

Wenn Sie ein Feld haben, das die Informationen ausgibt, die das JS verwenden, verwenden Sie dort einen Präprozessor, um die js hinzuzufügen. Daher hängt das js-Include von dem Feld ab, in dem die Karte angezeigt wird, und nicht vom Inhaltstyp.

Jeremy French
quelle
0

Eine einfache Lösung besteht darin, einfach die add_js zu platzieren:

  drupal_add_js('drupal_get_path('module', 'mymodule') . '/myjs.js');

in der Seite / Knoten template.php.

Nevos
quelle