Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Benutzerhandbuch › Entwicklung von Modulen und Themes › Theme Handbuch (Drupal 6) › Themebare Ausgaben anpassen ('overriding') ›

Definition von Variablen zur Verwendung im Template (preprocess functions)

Eingetragen von netzkoop (1820) am 11.12.2009 - 15:15 Uhr in
  • Drupal 6.x

[ Übersetzung der Seite Setting up variables for use in a template (preprocess functions) ]

Präprozessor-Funktionen werden nur verwendet für theming hooks in Form von Templates.
Die Hauptaufgabe des Präprozessors ist es Variablen zu definieren, die in den Template Dateien (.tpl.php) verwendet werden können. Reine Theme Funktionen arbeiten nicht mit Präprozessoren.

Anmerkungen:

  • Damit dein Theme die Preprocess Variablen erkennt muss das Template welches mit dem hook assoziiert ist innerhalb des Theme-Ordners existieren. Ab Drupal 6.7. ist dies nicht länger nötig. Wenn ein Standard Template existiert, kopiere es in den Themeordner und leere die Registry. Wie du Funktionen in Templates konvertieren kannst steht hier
  • Präprozessor-Funktionen werden auch verwendet zur Bereitstellung von Template Vorschlägen
  • In Version 5 abwärts dient die Funktion _phptemplate_variables dem gleichen Zweck

Es kann zahlreiche Präprozessoren geben für jeden theming hook. In den verschiedenen Schichten - Kern, Modulen, Engines und Themes können sie Variablen definieren, vor der eigentlichen Darstellung durch die Templates. Das hält den Quellcode sauber und einfach zu handhaben indem man die meiste Logik in die Präprozessoren verlagert.

Hier sind die erwarteten Präprozessoren. Sie werden in dieser Reihenfolge abgearbeitet sofern sie existieren:

  1. template_preprocess
    - Dies wird vom Core geliefert und immer hinzugefügt. Die hier erzeugten Variablen gelten für jeden Template hook.
  2. template_preprocess_hook
    - Das Modul oder Core welches den theming hook implementiert liefert das. Die Initialisierung der hook spezifischen Variablen wird üblicherweise hier gemacht.
  3. modulName_preprocess
    - Nicht zu verwechseln mit dem vorherigen Präprozessor. Dieser erlaubt anderen Modulen (als die den hook ursprünglich implementiert haben) Einfluss auf die Variablen zu nehmen. Gilt für alle hooks.
  4. moduleName_preprocess_hook
    - Selbe Idee wie der vorherige Präprozessor nur für bestimmte hooks.
  5. engineName_engine_preprocess
    - Der Präprozessor für Theming Engines. Gilt für alle hooks.
  6. engineName_engine_preprocess_hook
    - Noch ein Präprozessor für Theming Engines nur für einen einzelnen hook.
  7. engineName_preprocess
    - NICHT EMPFOHLEN. Das ist der erste Präprozessor, der innerhalb des Theme benutzt werden kann. Kann benannt werden nach der Engine mit dem das Theme läuft. Gilt für alle hooks.
  8. engineName_preprocess_hook
    - NICHT EMPFOHLEN. Noch ein Präprozessor banannt nach der Engine aber spezifisch für einen einzelnen hook.
  9. themeName_preprocess
    - Dieser ist nach dem Theme selbst benannt. Gilt für alle hooks.
  10. themeName_preprocess_hook
    - Wie der vorherige nur für einen bestimmten hook.

Es gibt hier viele Möglichkeiten die Variablen zu verändern. In den meisten Fällen existieren anfänglich nur die ersten beiden Präprozessoren. Der erste liefert die standard Basis-Variablen und der zweite liefert ein Set spezifisch für den theming hook. Zusätzliche Module die Methode 3&4 nutzen sollten dokumentieren wie. Das wird hier nicht ausführlich behandelt.

Obwohl es möglich ist bedient sich die standard PHPTemplate nicht dieser Möglichkeiten (5&6)

Themes können ihre Präprozessoren ab Möglichkeit 7 in der Liste hinzufügen. Die Präprozessor-Funktion sollte innerhalb der entsprechenden template.tpl.php definiert werden. Aufgrund der weiter unten beschriebenen Probleme wird empfohlen, den Themenamen als Prefix voranzustellen (9&10). Es ist möglich , die beiden letzten Methoden auch auf Sub-Themes anzuwenden.

Einige Anmerkungen:

  • Es gibt leider einen Bug im Theme System wenn ein Theme Teil einer Basis-/Sub-Theme Hierarchie ist. Jede Funktion mit dem Prefix engineName_preprocess wird mehrmals aufgerufen (einmal für jedes Theme in der Hierarchie) statt nur einmal. Das verschwendet nicht nur Ressourcen sondern kann auch zu schwer nachvollziehbaren Fehlern führen.
  • Der Themename sollte immer für Themes verwendet werden. Das minimiert die Gefahr, dass ein Sub-Theme eine Funktion mit dem Prefix engineName_preprocess doppelt deklariert und dadurch einen schweren PHP-Fehler erzeugt.

Beachte, dass diese Funktionen keinen return Wert zurückgeben dürfen und die Variablen mittels reference übergeben werden müssen. In der Form &$variables.

In früheren Schichten definierte Variablen werden auf diese Weise durch alle späteren Präprozessoren übergeben also pass auf dass du sie nicht unbeabsichtigt resettest vor dem Theme. Es ist in Ordnung sie zu überschreiben, unbeabsichtigt kann das aber zu Rätselraten führen.

Beispiel für einen Modul-Präprozessor, der hook "foo" implementiert:

<?php
function template_preprocess_foo(&$variables) {
 
$variables['foo_list'] = array(
   
'list item 1',
   
'list item 2',
   
'list item 3',
  );
}
?>

Und der Präprozessor deklariert durch das Theme um die Variable von oben hinzuzufügen:

<?php
function drop_preprocess_foo(&$variables) {
 
// Do not do this unless you mean to:
 
$variables['foo_list'] = array('list item 4');

 
// Instead do this:
 
$variables['foo_list'][] = 'list item 4';
}
?>

Die Variablen eingetragen in die Template Datei sind die in $variables gesetzten Schlüssel. Für das obige Bsp. wäre dies also $foo_list

Benutzt man einen Präprozessor unspezifisch zu einem Theming hook, kann ein zweiter Parameter benutzt werden der immer den aktuellen hook übergibt. Diese Methode kann gewünscht sein sofern es geteilten Code für mehrere Theming hooks gibt. Sonst ist der Code in einer spezielleren Funktion wie oben beschrieben einfacher zu pflegen.

<?php
function drop_preprocess(&$variables, $hook) {

 
// Shared between the 'foo' and 'bar' theming hooks.
 
if ($hook == 'foo' || $hook == 'bar') {
   
$variables['foobar_item'] = 'foobar item';
  }

 
// Specific to 'foo'.
 
if ($hook == 'foo') {
   
$variables['foo_item'] = 'foo item';
  }
 
// Specific to 'bar'.
 
elseif ($hook == 'bar') {
   
$variables['bar_items'] = 'bar item';
  }
}
?>

Weitere HowTo's und Code-Snippets:

  • Zusätzliche Präprozessor-Funktionen für Inhaltstypen
‹ Grundlagen zu 'overriding' nach oben 5.x Themes in 6.x konvertieren ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 23 Stunden 59 Minuten
  • Hey danke
    vor 1 Tag 18 Stunden
  • Update: jetzt gibt's ein
    vor 2 Tagen 12 Stunden
  • Hallo, im Prinzip habe ich
    vor 6 Tagen 22 Stunden
  • Da scheint die Terminologie
    vor 1 Woche 1 Stunde
  • Kannst doch auch alles direkt
    vor 1 Woche 4 Tagen
  • In der entsprechenden View
    vor 1 Woche 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 4 Tagen
  • gelöst
    vor 4 Wochen 21 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 13 Gäste online.

DrupalCenter durchsuchen:

Benutzerhandbuch

  • FAQ - Häufig gestellte Fragen.
  • Links & Downloads
  • Über Drupalcenter.de und das deutschsprachige Benutzerhandbuch
  • Über Drupal
  • Einsteiger
  • Fortgeschrittene
  • Entwicklung von Modulen und Themes
    • Das Drupal Theme System (PHPTemplate)
    • Theme Handbuch (Drupal 6)
      • Drupal 5 Theming für Eilige
      • Drupal 6 Theming für Eilige
      • Arbeiten mit CSS
      • Einführung ins Theming
      • Festlegen der Theme Komponenten und Einstellungen
      • Themebare Ausgaben anpassen ('overriding')
        • Anfänger Leitfaden zum Überschreiben themebarer Ausgaben
        • Grundlagen zu 'overriding'
        • Definition von Variablen zur Verwendung im Template (preprocess functions)
    • 5.x Themes in 6.x konvertieren
    • Leitfaden zur Entwicklung von Modulen
    • Module zu Drupal CVS hinzufügen
    • Resourcen für den Theming-Ninja
  • Drupalcenters Community
  • Drupal 7 Video-Trainings (Deutsch)
  • Drupal-Testumgebung erstellen
  • Drupal 6 Module
  • Drupal 7 Module
  • Drupal Screencasts auf deutsch
  • Archiv

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
  • » Forum
  • » Ü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

Quicklinks III

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

RSS & Twitter

  • Drupal Planet deutsch
  • 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