Startseite
  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Übersetzungsserver
  • » Suche
Startseite › Benutzerhandbuch › Fortgeschrittene › Tutorials & How To's - Tipps & Tricks ›

Drupal Theming: JavaScript einhängen in Abhängigkeit von Page-Variablen

Eingetragen von netvio Individu... (10) am 01.06.2010 - 00:51 Uhr in
  • Drupal 6.x

Schon lange sind die Tage vorbei, bei denen man mit bloßem CSS und ein bißchen Markup einen bombigen Drupal-Theme gebaut hat. Der Themer von heute stützt sich auch gerne mal auf JavaScript für Effekte, die den Kunden dann hoffentlich vom Hocker pusten.
Eine JavaScript-Datei in einem Drupal-Theme einzubinden ist angeblich nicht schwer – sagt zumindest die Seite in der Dokumentation. Ist ja spitze, denkt man sich und das war auch mein Gedanke.

Jetzt hatte ich den Fall, das ich eine gewisse JavaScript-Datei nur dann mit in die Seitenausgabe aufnehmen wollte, wenn bestimmte Page-Variablen gesetzt sind. Also fix die Funktion template_preprocess_page in der entsprechenden template.php meines Themes überladen und brav meinen Aufruf von drupal_add_js eingebaut. Alles auch ganz erwartungsvoll dem oben genannten Artikel folgend umgesetzt. Somit sah das ganze ungefähr so aus:
view source
print?
01 /**
02 * @brief
03 * Implementation von template_preprocess_page.
04 *
05 * @see http://api.drupal.org/api/function/template_preprocess_page/6
06 */
07 function meintheme_preprocess_page(&$variables) {
08 // JavaScript nur einhängen, wenn die Variable TRUE ist.
09 if ($variables['irgendwas']) {
10 drupal_add_js(drupal_get_path('theme', 'meintheme') . '/js/mein.js', 'theme');
11 }
12 }

Alles klar, speichern, hochladen, Drupal Caches leeren, Seite neuladen. Nichts passiert.

Gut, OK kann passieren. Code überprüft, alles schlüssig. Dann Firebug geöffnet und nachgesehen, ob auch ein entsprechender Eintrag im -Bereich der Seitenausgabe steht. Natürlich nicht. Es schien von Anfang an schon zu einfach zu sein -.-
Um das ganze jetzt kurz zu machen, hier die Erklärung warum die Referenz auf die JavaScript-Datei nicht da war, obwohl offensichtlich alles richtig zu sein schien.

Das Problem liegt darin, dass die Page-Variablen in Drupal u.a. auch die Referenzen auf alle registrierten JavaScript-Dateien umfassen. Lässt man sich in der obigen Funktion nämlich einfach mal $variables['scripts'] ausgeben (bspw. mit Hilfe des Devel-Moduls, so sieht man alle entsprechenden Einträge. Der Aufruf von drupal_add_js() findet also zu spät statt, da die Page-Variable $scripts (wie sie in page.tpl.php heißt) bereits gefüllt wurde.
Sieht man sich hierzu die Core-Implementation in Drupal 6 von template_preprocess_page einmal genauer an, stößt man auf diese Zeile:
view source
print?
1 $variables['scripts'] = drupal_get_js();

Genau darin liegt der Trick. Dupliziert man diese Zeile einfach nach dem Aufruf von drupal_add_js in der template.php, so wird auch unsere JavaScript-Datei ausgeben.
Das Endergebnis sieht dann ungefähr so aus:
view source
print?
01 /**
02 * @brief
03 * Implementation von template_preprocess_page.
04 *
05 * @see http://api.drupal.org/api/function/template_preprocess_page/6
06 */
07 function meintheme_preprocess_page(&$variables) {
08 ....
09 // JavaScript nur einhängen, wenn die Variable TRUE ist.
10 if ($variables['irgendwas']) {
11 drupal_add_js(drupal_get_path('theme', 'meintheme') . '/js/mein.js', 'theme');
12 $variables['scripts'] = drupal_get_js();
13 }
14 ....
15 }

Happy Theming, kids!

‹ Drupal Code Highlighting in Redmine Projektarchiv (CodeRay) nach oben Drush - Das Schweizermesser für Drupal auf Kommandozeile ›

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Drupal Entwickler für Erstellung von Shop mit Ubercart in bestehende Drupal-Seite
  • Viele Fragen die mich quälen ...
  • Fataler Fehler nach update auf Drupal 6.24 wg fehlender Funktion in image.inc
  • meine Profilbesucher anzeigen?
  • Computed_Field Node Objekt bzw. nid?
  • URLs: Groß- und Kleinschreibung
  • Rules und Organic Group
  • [erledigt] drupal 7 - read more ausblenden
  • Modul für Absatznummern / Randnummern
  • Path-Based Metatags - wofür sind die gut?
  • Views Field Language (Spracherkennung der Felder) funktiniert nicht
  • [gelöst] Danland: Standard-Startseite formatieren
Weiter

Neue Kommentare

  • Problem gelöst
    vor 2 Stunden 7 Minuten
  • ich könnte mir vorstellen
    vor 2 Stunden 7 Minuten
  • Ja und wie greife ich da auf
    vor 2 Stunden 16 Minuten
  • Unser Server kann das. Ich
    vor 2 Stunden 30 Minuten
  • Modul "User Relationships"
    vor 2 Stunden 30 Minuten
  • Ist der Host ein Windows-Host?
    vor 2 Stunden 37 Minuten
  • Du läßt Dir in der Zeile die
    vor 2 Stunden 43 Minuten
  • Patch aus Issue Queue
    vor 3 Stunden 5 Minuten
  • "Read more"-Link modifizieren
    vor 3 Stunden 8 Minuten
  • CSS mit body-Tag-Klasse präzisieren
    vor 4 Stunden 2 Minuten

Statistik

Beiträge im Forum: 160314
Registrierte User: 14286

Neue User:

  • schmittrich
  • mah1987
  • Nadine.S

» Alle User anzeigen

User nach Punkten sortiert:
stBorchert5214
quiptime4713
Tobias Bähr3825
md3727
bv3680
Thoor3282
Alexander Langer3155
wla2795
dereine2630
pebosi2495
» User nach Punkten
Zur Zeit sind 0 User und 3 Gäste online.

Benutzerhandbuch

  • FAQ - Häufig gestellte Fragen.
  • Links & Downloads
  • Über Drupalcenter.de und das deutschsprachige Benutzerhandbuch
  • Über Drupal
  • Einsteiger
  • Fortgeschrittene
    • Best Practice - Drupal Sites - Guidelines
    • Die beliebtesten Themes und Module
    • Tutorials & How To's - Tipps & Tricks
      • Kurztipps - Dinge die Stunden sparen können.
      • Notfallpläne - Tipps die Deine Drupalinstallation retten können
      • Anleitung zur Erstellung eines einfachen Kontaktformulars
      • Arbeiten mit dem Drupal Taxonomie-System [beinhaltet veraltete Inhalte]
      • Bearbeiten-Tab zu jeden Block hinzufügen
      • Block View mit Argument
      • Das Tagebuch einer Site
      • Drupal 6 - Automatisch unterschiedliche Bildgröße bei Teaser und Artikel
      • Drupal 6 - Eigene CSS Datei in ein Theme integrieren
      • Drupal 6 - Einfache Bildergalerie mit Image und Lightbox2
      • Drupal 6 - Einrichten eines Kalenders
      • Drupal 6 - Google Adsense ohne Zusatzmodul einbinden
      • Drupal 6 - Hauptnavigation mit DropDown Effekt ab Ebene Zwei
      • Drupal 6 - ImageMagick mit XAMPP Lite nutzen
      • Drupal 6 - Imagefield mit Imagecache und Colorbox
      • Drupal 6 - Installation FCK Editor
      • Drupal 6 - Installieren der WYSIWYG API inkl. Editoren
      • Drupal 7: mehrere Bilder in Node: 1 Bild in Anrisstext
      • Drupal Code Highlighting in Redmine Projektarchiv (CodeRay)
      • Drupal Theming: JavaScript einhängen in Abhängigkeit von Page-Variablen
      • Drush - Das Schweizermesser für Drupal auf Kommandozeile
      • Einfaches und erfolgreiches Patchen unter Windows
      • Eingabeformat & Inputfilter
      • Einrichten eines einfachen, statischen Menüsystems
      • Erstellen von Patches
      • Gallery mit CCK und Views erstellen (Drupal 5)
      • Header image Modul einrichten
      • Inhaltsübersicht für einen User mit einem View erstellen
      • Javascript und CSS-Dateien einbinden
      • Kontaktformular mit Jquery aufwerten
      • Leitfaden zur Erstellung von Suchmaschinenoptimierten Drupal-Sites
      • Mac OSX - Backupskript für Websites auf MAMP
      • Module updaten via Shell auf Windows
      • Module übersetzen
      • Perl-Script zum Erzeugen einer statischen Kopie einer Drupal-Website
      • Portierung eine Themes von openwebdesign.org
      • Prozentbalken bei Views (Balkendiagramm)
      • Themen eines Node-Formulars
      • Titel mit Stil
      • Umkreissuche mit Location- und Views-Modul
      • Usergalerie mit ImageCache, CCK, Views + Thickbox
      • Userprofil mit Usernodes erstellen
      • Validierung von Usereingaben bei Nodes
      • Variation vom Showroom auf drupalcenter.de
      • View mit Eingabeformular für neue Beiträge
      • WebSVN mit Drupal Code Highlighting
      • Zusätzliche Submit-Schaltfläche in Node-Formularen
      • i18n Language Switcher Block, die Links mit den Flaggen themen
      • ui.slider als Ersatz für den Ajax-Pager von Views
      • Zugriffsbeschränkungen für Nodes - eine Übersicht der Möglichkeiten
  • Entwicklung von Modulen und Themes
  • Drupalcenters Community
  • Bücherecke
  • Drupal 7 Video-Trainings (Deutsch)
  • Drupal 6 Module
  • Drupal 7 Module
  • Drupal Screencasts auf deutsch
  • Archiv

Buchempfehlung

Webseiten erstellen Drupal 7
Content - Layout - Administration
Das Drupal-Entwicklerhandbuch
Der Praxisleitfaden für Drupal-basierte Webprojekte.
Pro Drupal 7 Development
(Expert's Voice in Open Source)

Das Copyright des deutschsprachigen Drupal-Benutzerhandbuches unterliegt den jeweiligen Autoren. Übersetzungen des englischsprachigen Drupal-Benutzerhandbuches unterliegen der Creative Commons License, Attribution-ShareAlike 2.0.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's
  • Bücherecke

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed Drupal Podcast
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association