10.3 Die Dateien eines typischen Drupal Themes im Einzelnen

Jetzt möchte ich Ihnen die Dateien eines typischen Drupal-Themes kurz vorstellen und ihre Funktion erklären.

10.3.1 Die Informationen zum Theme: themename.info

Ohne eine Datei themename.info wird Ihr Theme von Drupal nicht erkannt. Sie muss also vorhanden sein. Der Name dieser Datei ist im Beispiel garland_new.info. Der Vorname der Datei, also garland_new, wird zum Drupal-internen Namen des Themes. Auch das ist eine Änderung im Vergleich zu Drupal 5, wo der Name des Theme-Ordners zum internen Namen wurde. Es empfiehlt sich aber, für Theme-Ordner und themename.info den gleichen Namen zu verwenden.

Die folgenden Einträge sind in themename.info-Dateien erlaubt bzw. müssen teilweise vorhanden sein:

  • name (benötigt)
    name = Garland Neu
    Dieser Name wird auf der Theme-Administrationsseite (admin/build/themes) angezeigt und muss nicht mit dem Namen der themename.info-Datei übereinstimmen, wird aber meistens gleich sein.

  • description (empfohlen)
    description = Garland angepasst
    Die Beschreibung wird auf der Theme-Administrationsseite (admin/build/themes) unter dem Namen angezeigt.

  • screenshot (optional)
    screenshot = screenshot.png
    Hier kann ein frei gewählter Pfad für einen Screenshot des Themes angegeben werden. Der Screenshot wird auf der Theme-Administrationsseite (admin/build/themes) neben dem Namen angezeigt.

  • version (optional)
    version = 1.0
    Eine frei gewählte Versionsnummer. Bei Themes, die auf drupal.org veröffentlicht werden, wird diese Versionsnummer automatisch von drupal.org vergeben.

  • core (benötigt)
    name = 6.x
    Die Drupal-Core-Version mit, der das Theme kompatibel ist. Für alle Drupal 6-Themes muss hier 6.x stehen, sonst wird das Theme nicht angezeigt.

  • engine (empfohlen)
    engine = phptemplate
    Name der verwendeten Theme-Engine, in der Regel PHPTemplate.

  • base theme (optional)
    base theme = garland
    Nur für Sub-Themes. Das Sub-Theme Minnelli hat hier z.B. den Eintrag „Garland“.

  • regions (optional)
    regions[left] = Left sidebar
    regions[right] = Right sidebar
    regions[content] = Content
    regions[header] = Header
    regions[footer] = Footer

    Hier können die Regionen definiert werden, die dann auf der Block-Administrationsseite zur Verfügung stehen. Sind keine Regionen definiert, werden die oben angegebenen Standard-Regionen erzeugt. Drupal erzeugt den Inhalt in der Page-Variable mit dem maschinenlesbaren Namen in Klammern. Achtung: Um eine Region im Browser auszugeben, muss der Platzhalter, wie anfangs beschrieben, in der page.tpl.php platziert werden.

  • features (optional)
    features[] = logo
    features[] = name
    features[] = slogan
    features[] = mission
    features[] = node_user_picture
    features[] = comment_user_picture
    features[] = search
    features[] = favicon
    ; Durch das Auskommentieren durch Semikolon werden die
    ; Nachfolgenden Theme-Features ausgeblendet.
    ; features[] = primary_links
    ; features[] = secondary_links

    Auf der Theme-AdministrationssSeite des jeweiligen Themes (admin/build/themes/settings/ThemeName) stehen die Theme-Features zur Verfügung. Möchten Sie einige dieser Features deaktivieren, können Sie, wie oben, die entsprechenden Features durch Semikola auskommentieren.

  • stylesheets (optional)
    stylesheets[all][] = MeineEigeneStyle.css
    Hier kann die standardmäßig verwendete CSS-Datei definiert werden. Ist nichts definiert, wird style.css verwendet.

  • scripts (optional)
    scripts[] = script.js
    Hier kann eine standardmäßig verwendete Javascript-Datei definiert werden. Wenn nichts definiert wird, wird keine .js-Datei standardmäßig eingebunden.

  • php (optional)
    php = 4.3.3
    Hier kann eine PHP-Mindestversion angegeben werden. Standardmäßig wird die von Drupal erforderliche PHP-Version angenommen.

Der Inhalt dieser Datei wird von Drupal wie in Abbildung 10.3 dargestellt.

Anzeige auf der Theme-Administrationsseite
Abbildung 10.3: Anzeige auf der Theme-Administrationsseite

HINWEIS

Der Inhalt der themename.info-Datei wird im System-Cache gespeichert. Änderungen werden nicht sofort sichtbar. Hierzu müssen Sie den Cache leeren. Dies geht z.B. auf der Seite admin/settings/performance.

ACHTUNG

Der Name Ihres Themes darf nicht mit dem Namen eines der installierten Module übereinstimmen, da sich dadurch intern Konflikte bei den PHP-Funktionsnamen ergeben können!

10.3.2 Dateien mit der Endung *.tpl.php

Wenn auch optional, sind die Template-Dateien mit der Endung tpl.php zusammen mit den CSS-Dateien das Herzstück eines Themes. Typischerweise enthält ein Theme zumindest folgende Dateien:

  • page.tpl.php (enthält das HTML-Grundgerüst der Seite)

  • node.tpl.php (Ausgabe der einzelnen Nodes)

  • block.tpl.php (Ausgabe der einzelnen Blöcke)

  • comment.tpl.php (Ausgabe der Kommentare)

Werden keine eigenen Template-Dateien verwendet, nutzt Drupal die im Core enthaltenen Template-Dateien. Eine vollständige und aktuelle Liste der möglichen Template-Dateien, die Sie verwenden können, finden Sie auf drupal.org5.

Beim Aufruf der Template-Dateien geht PHPTemplate nach einer bestimmten Logik vor. Dabei sucht Drupal zuerst nach tpl.php-Dateien mit den oben erwähnten Namen. Um die Frontpage ihres Themes zum Beispiel anders zu gestalten, müssen Sie zusätzlich zur page.tpl.php im Theme-Ordner noch eine page-front.tpl.php anlegen. Weitere Möglichkeiten für die page.tpl.php-Dateien in absteigender Priorität:

  • page-node-edit.tpl.php (das Formular zur Bearbeitung eines Inhalts)

  • page-node-1.tpl.php (der Inhalt mit der ID 1)

  • page-node.tpl.php (jeder Inhalt)

  • page.tpl.php

Für die node.tpl.php zur Ausgabe von Nodes gibt es folgende Varianten:

  • node-story.tpl.php (Eigene Ausgabe für Story-Nodes)

  • node-blog.tpl.php (Eigene Ausgabe für Blog-Nodes)

  • node-IhrNodetype.tpl.php (Eigene Ausgabe für Nodes vom Typ „IhrNodetype“)

Auch für die block.tpl.php-Dateien gibt es diverse Möglichkeiten, die im Folgenden in absteigender Priorität gelistet werden:

  • block-module-delta.tpl.php (Delta ist die ID des Blocks)

  • block-module.tpl.php

  • block-region.tpl.php

  • block.tpl.php

10.3.3 Die Datei template.php

In der Datei template.php werden Theme-spezifische PHP-Funktionen platziert. template.php muss mit einem PHP-Opening-Tag <?php beginnen. Das PHP-Closing-Tag ?> ist nicht nötig und sollte nicht verwendet werden, da es unter Umständen zu Fehlermeldungen führen kann.

Icon HINWEIS

In den tpl.php-Dateien gibt es nur PHP-Platzhalter, in template.php hingegen fast nur PHP-Code!

Typische Funktionen, die in der template.php aufgerufen werden, bereiten beispielsweise Variablen für die Verwendung in den tpl.php-Dateien vor („pre-processing“). Funktionen in der template.php-Datei werden schneller ausgeführt als in tpl.php-Dateien. Weitere Informationen zu den Preprocess-Funktionen finden Sie auf drupal.org6.

Ein Beispiel aus dem Theme Garland ist die Funktion phptemplate_breadcrumb(), die aus dem Array $breadcrumb die Breadcrumb-Links (Brotkrumen-Navigation) von Drupals Core-Theme Garland erzeugt (Listing 10.2).

/**

* Return a themed breadcrumb trail.

*

* @param $breadcrumb

* An array containing the breadcrumb links.

* @return a string containing the breadcrumb output.

*/

function phptemplate_breadcrumb($breadcrumb) {

if (!empty($breadcrumb)) {

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

}

}

Listing 10.2: Funktion phptemplate_breadcrumb() in der template.php

Falls Sie kein PHP sprechen und das Listing für Sie nur Gobbledygook ist, machen Sie sich keine Sorgen, denn diese Funktionen müssen Sie in der Regel nicht verändern.

10.3.4 Jedes Theme kann weitere Themes enthalten (Sub-Themes)

Ein weiteres Element, das in einem Theme-Ordner enthalten sein kann, ist ein Sub-Theme. Sub-Themes sind abhängig von dem jeweiligen Base-Theme, das in der subtheme.info-Datei definiert ist. Ein Beispiel aus dem Drupal-Core bietet das Sub-Theme Minnelli (eine Variante von Garland mit fester Breite). Zusätzlich zur CSS-Datei style.css von Garland lädt Minnelli die Datei minnelli.css durch folgenden Eintrag in der Datei minnelli.info.

stylesheets[all][] = minnelli.css


Ihre Bewertung: Nichts

Hinweis

Sehr wahrscheinlich muss es doch bei "core"

core = 6.x

lauten (und nicht name=) -- zumindest steht es so in der Abbildung 10.2.
Auch finde ich es schade, dass bei der Aufzählung der Einträge für die themename.info-Datei nicht noch erwähnt wurde, welche anderen Werte möglich sind (z. B. bei Engine), oder was die Auswirkungen von "base theme" sind (beschreibt es nur, sind mehr als ein Wert möglich etc)

Vielen Dank für das ansonsten sehr schöne Buch,
Johannes