Das Örtchen RSS-Feed
Kategorie
Kategorie: Blog
Buttons & Statistiken
Neueste Kommentare

Drupal: Wie treibe ich es richtig? (Teil 2)

Nachdem ich im letzten Artikel dieser Reihe erläutert habe, wie die korrekten Wege zum Einbinden zusätzlicher JavaScript-Dateien im Theme sind, möchte ich nun Alternativen zu direkten Event-Handlern auf dem Body-Tag in der page.tpl.php aufzeigen.

Das Problem

Ich hatte vor meinen Optimierungen zwei Eventhandler direkt im Body-Tag aufgeführt. Dies hat jedoch den Nachteil, daß eine Einschränkung auf bestimmte Seiten nur über unschöne if-Anweisungen direkt in der page.tpl.php möglich war. Dies wollte ich im Rahmen der Lesbarkeit jedoch unbedingt vermeiden.

Die Lösung

In Variante C meines ersten Artikels habe ich ja schon eine Möglichkeit zur Einbindung von JavaScript-Dateien mittels der Funktion drupal_add_js() vorgestellt. Mittels dieser Funktion ist jedoch auch eine direkte Einbindung von JavaScript-Befehlen möglich, was erneut in der Funktion phptemplate_preprocess_page() in der template.php (über der Zeile mit dem drupal_get_js-Aufruf) geschieht.

    drupal_add_js(
        'alert("test");',
        'inline'
    );

Hierzu übergibt man als zweiten Parameter anstatt des Strings theme nun die Angabe inline. Als ersten Parameter übergibt man, wie im Beispiel gezeigt, die JavaScript-Befehle als String.

Achtung: Wichtig ist hierbei die korrekte Verwendung von Anführungszeichen. Wird wie im Beispiel der String von einfachen Anführungszeichen umschlossen, so darf man für JavaScript nur noch die Gänsefüsschen benutzen.

Da der JavaScript-Code jedoch nicht direkt an der Stelle der Einbindung im HTML-Code ausgeführt werden soll, sondern nachdem die Seite geladen wurde (normalerweise onload-Event-Handler auf dem Body-Tag), führte ich meine Recherche fort. Hierbei half mir ein Beitrag, den ich schon im Rahmen meines letzten Artikels gefunden hatte, aber nicht komplett gelesen hatte.

    drupal_add_js(
'Drupal.behaviors.meinThemeName = function(context) {
alert("test");
};',
        'inline'
    );

Achtung: Auch hier muss man auf die korrekte Verwendung der Anführungszeichen achten. Der fettmarkierte Teil kann beliebig benannt werden, muss jedoch eindeutig sein, weswegen ich beispielsweise meinThemeName oder eine ähnliche Schreibweise empfehlen würde.

Nach den Erläuterungen von aj045 würde ich vermuten, daß diese Variante als Ersatz für einen onload-Event-Handler auf dem Body-Tag gelten kann. Im Gegensatz zu seinem zweiten Beispiel (im obig verlinkten Kommentar) benötigte ich zudem noch eine Möglichkeit auf Größen-Änderungen des Browserfensters zu reagieren und hierbei Funktionsparameter zu übergeben. Ich habe mich deswegen für nachfolgende Variante entschieden:

    drupal_add_js(
'Drupal.behaviors.meinThemeName = function(context) {
            $(window).resize(function() {
                alert("test");
            });
};',
        'inline'
    );

Hierbei wird mittels jQuery an das Window-Objekt ein resize-Handler gebunden, durch den dann wiederum alle JavaScript-Befehle in der inneren Funktion aufgerufen werden.

Fazit

Im Gegensatz zu direkten Event-Handlern auf dem Body-Tag wird eine Menge Code benötigt, dafür ist dann jedoch die ganze Magie im Hintergrund versteckt. Neben Drupal.behaviors gibt es übrigends noch weitere nette Spielereien, die ich aber bisher noch nicht benötigt bzw. genutzt habe.

Hallo! Bist du neu hier? Dann abonniere doch den RSS-Feed dieses nicht mehr ganz so stillen Örtchens, um über meine geistigen Ergüsse auf dem Laufenden zu bleiben. Alternativ besteht auch die Möglichkeit, sich von FeedBurner per E-Mail über meine Ausscheidungen benachrichtigen zu lassen.

Neuen Kommentar schreiben

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Der Inhalt dieses Feldes wird öffentlich zugänglich angezeigt, aber als rel="nofollow" markiert.
Hinweis

Kommentare beleben den Blog! Ich freue mich über jeden Kommentar. Du kannst hier offen Deine Meinung zum Artikel sagen, aber bitte beachte die Netiquette und vermeide es andere zu beleidigen.

Bitte unterlasst es die Kommentare zu SEO-Zwecken zu missbrauchen. Kommentare mit Links, die nicht zu Blogs führen (oder zu Blogs mit Grauzonen-Themen) und/oder Keywords als Namen verwenden, sind nicht erwünscht!

Möchtest Du mir einen Blog-Artikel schmackhaft machen, dann schreib die URL ohne HTML-Tag in den Kommentarbereich und ich werde diesen bei Gefallen verlinken.