10.6 Ein Beispiel zum Überschreiben von Theme-Funktionen in Drupal 6

Das Überschreiben von Theme-Funktionen aus Modulen ist in Drupal 6 durch die neue Variante mit den .tpl-Dateien in den Hintergrund gerückt. Wenn Sie ein komplett neues Theme schreiben, ist es allerdings nach wie vor manchmal nützlich, von dieser Möglichkeit Gebrauch zu machen. Aus diesem Grund möchte ich Ihnen hier noch ein kleines Beispiel geben, um das Prinzip des Überschreibens von Theme-Funktionen zu erläutern.

In Abschnitt 10.5.5 Welche Datei ist für was verantwortlich? haben wir beim Klick auf die Breadcrumb-Navigation erfahren, dass für die Ausgabe dieser Navigation die Funktion theme_breadcrumb() verantwortlich ist. Ein Klick auf die Funktion im Themer info-Fenster öffnet einen Link zu der entsprechenden Funktion auf http://api.drupal.org. Die Funktion ist kurz und sieht wie folgt aus:

<?php

function theme_breadcrumb($breadcrumb) {

if (!empty($breadcrumb)) {

return '<div class="breadcrumb">'. implode(' » ', $breadcrumb) .'</div>';

}

}

?>

Um zu verstehen, was die Funktion macht, ist ein klein wenig Wissen in PHP nötig. Die Funktion nimmt ein Array namens $breadcrumb und trennt die einzelnen Elemente in der Ausgabe durch das Zeichen ‘ » ‘. Sogar die einzelnen Elemente des Arrays können wir uns durch einen einfachen Klick auf die Function Arguments in der Themer info ansehen (Abbildung 12)! Wollen wir ein anderes Zeichen für die Trennung der einzelnen Breadcrumb-Links verwenden (z.B. das Pipe-Zeichen ‘ | ‘), müssen wir diese Funktion überschreiben.

Dazu erzeugen wir eine neue Datei namens template.php in unserem Theme-Verzeichnis (sites/all/themes/neuestheme) und kopieren die obige Funktion in die Datei, wobei wir die Funktion umbenennen. Auch hierfür macht uns das Theme Developer-Modul Vorschläge (Candidate function names): phptemplate_breadcrumb() oder noch spezifischer neuestheme_breadcrumb()(Abbildung 10.12).

Candidate function names
Abbildung 10.12: Candidate function names

Damit ergibt sich folgender Inhalt für unsere Datei template.php (Listing 10.8):

<?php

/*

* Wichtig(!) Unser Kommentar: Override der Funktion theme_breadcrumb()

*/

function neuestheme_breadcrumb($breadcrumb) {

if (!empty($breadcrumb)) {

return '<div class="breadcrumb">'. implode(' | ', $breadcrumb) .'</div>';

}

}

Listing 10.8: template.php (ohne PHP closing-tag! „?>“)

Nach diesem Muster kann man grundsätzlich jede erdenkliche Theme-Funktion seinen Erfordernissen anpassen.

Ihre Bewertung: Nichts