JavaScript kann auf einer Seite nicht hinzugefügt werden

7

Ich benutze dies, aber ich verstehe nicht, warum es nicht funktioniert.

if ($_SERVER['REQUEST_URI'] == '/node/1') { 
  drupal_add_js(drupal_get_path('theme', 'sanskrit').'/sites/all/themes/sanskrit/scripts/jquery-1.4.3.min.js', 'inline'); 
  drupal_add_js('/sites/all/themes/sanskrit/scripts/scripts/jquery.nivo.slider.pack.js');   
} 

Ich möchte bestimmte JavaScript-Dateien hinzufügen, wenn der Benutzer die Startseite anzeigt.

Jaiffable
quelle

Antworten:

17

Dies sollte es tun:

function MYTHEME_preprocess_page(&$vars) {
  if (drupal_is_front_page()) {
    drupal_add_js(drupal_get_path('theme', 'MYTHEME') . '/MYSCRIPTS/myscript.js');
    $vars['scripts'] = drupal_get_js();
  }
}

Zu Ihrer Information: Sie würden es verwenden, drupal_get_jswenn Module auch hook_preprocess_pageselbst neue Skripte verwenden und festlegen.

Außerdem würde ich nicht einfach so oder so eine neuere Version von jQuery hinzufügen. Probieren Sie entweder jQuery Update oder jQuery Multi aus

Chapabu
quelle
hey ich bin immer Fehler in dieser Zeile Funktion MYTHEME_preprocess_page (& $ vars) {was soll ich tun
Jaiffable
Erhalten Sie Undefined functionFehler? Ich denke, es sollte drupal_is_front_page()wie meine Antwort unten sein.
Ninjascorner
Hoppla ... Ich habe meine Antwort bearbeitet. Das ist eine dieser Funktionen, die ich IMMER falsch eingebe. Vielen Dank für den Hinweis!
Chapabu
4

Alternativ: Das Modul JavaScript-Bibliotheken . Sie können das Skript nicht auf die Startseite beschränken, aber es ist sicherlich viel einfacher als ein Modul zu schreiben, nur um ein Skript zu laden.

paul-m
quelle
3

Wenn Sie mit einem Modul arbeiten, fügen Sie es wie folgt in hook_init ein:

function mymodule_init() {
  if(drupal_is_front_page()) {
    drupal_add_js(drupal_get_path('theme', 'sanskrit') . '/sites/all/themes/sanskrit/scripts/jquery-1.4.3.min.js'); 
    drupal_add_js(drupal_get_path('theme', 'sanskrit') . '/sites/all/themes/sanskrit/scripts/scripts/jquery.nivo.slider.pack.js');
  }
}

Wenn Sie es in preprocess_page einfügen möchten:

function yourTheme_preprocess_page(&$vars) {
  if(drupal_is_front_page()) {
     drupal_add_js(drupal_get_path('theme', 'sanskrit') . '/sites/all/themes/sanskrit/scripts/jquery-1.4.3.min.js'); 
     drupal_add_js(drupal_get_path('theme', 'sanskrit') . '/sites/all/themes/sanskrit/scripts/scripts/jquery.nivo.slider.pack.js');
     $vars['scripts'] = drupal_get_js();
  }
}

Oder Sie können es in Ihre Datei theme.info einfügen, wenn Sie ein eigenes Thema erstellen.

scripts[] = scripts/jquery.nivo.slider.pack.js
Ninjascorner
quelle
2

Das beste und einfachste Mittel, um Javascript zu einer Startseite hinzuzufügen, ist über Kontext und Kontext-Add-Assets . Kontext- und Kontext-Add-Assets können ebenfalls exportiert werden, und Sie können eine Funktion erstellen, die später verwendet werden kann.

Weitere Informationen zum Hinzufügen von Assets im Kontext :

Dieses Modul fügt eine Reaktion im Kontext hinzu, um Ihren Seiten Themen-, Modul- oder benutzerdefinierte Ordnerdateien hinzuzufügen.

Wollten Sie schon immer schnell eine CSS-Datei zu einem Thema hinzufügen? Fügen Sie eine js-Datei nur auf einer Seite (oder einem Abschnitt?) Ein.

Machen Sie die Verwendung mehrerer CSS-Dateien mit diesem Modul zum Kinderspiel und nutzen Sie die Möglichkeiten des Kontexts in Ihrem Thema!

Chrisjlee
quelle
1

Es funktioniert nicht, weil Sie die zurückgegebene Zeichenfolge drupal_get_path('theme', 'sanskrit')mit verketten '/sites/all/themes/sanskrit/scripts/jquery-1.4.3.min.js'. Angenommen, Sie haben Drupal nicht in einem Unterverzeichnis des Server-Stammverzeichnisses installiert. Der Dateiname, an den Sie übergeben, drupal_add_js()lautet sites / all / theme / sanskrit / bbbsites / all / theme / sanskrit / scripts / jquery-1.4.3. min.js.

Der Code, den Sie verwenden sollten, ist der folgende.

if ($_SERVER['REQUEST_URI'] == '/node/1') {
  $theme_path = drupal_get_path('theme', 'sanskrit'); 
  drupal_add_js($theme_path . '/scripts/jquery-1.4.3.min.js', 'inline'); 
  drupal_add_js($theme_path . '/scripts/jquery.nivo.slider.pack.js');   
} 

Um zu überprüfen, ob der Benutzer die Startseite anzeigt, rufen Sie einfach drupal_is_front_page () auf .

Pfade wie sites / all / theme sollten niemals fest in einem Theme / Modul-Code codiert werden, da ein Theme in sites/<domain.name>/themes/<theme.name>und ein Modul in installiert werden könnte sites/<domain.name>/modules/<module.name>. Angenommen, die Drupal-Installation wird für die Domäne blog.example.com verwendet, das Modul Ansichten kann in sites / blog.example.com / modules / views installiert werden und ein Thema wie das Whitebull-Thema kann in sites / blog installiert werden. example.com/themes/whitebull.

kiamlaluno
quelle