Verständnis von Drupal 7's hook_theme()
Was ist hook_theme()?
hook_theme() dient als grundlegende Komponente im Theming-System von Drupal 7. Es bietet einen zentralen Ort, an dem Module ihre Theme-Implementierungen definieren können, die dann von anderen Modulen oder Themes angepasst werden können. Diese Flexibilität ermöglicht es Entwicklern, zu ändern, wie Variablen verarbeitet werden, bevor sie die endgültige Theme-Funktion oder Vorlagendatei erreichen.
Implementierung von Theme-Funktionen
Die grundlegende Implementierung einer Theme-Funktion folgt diesem Muster:
theme('poll_results', array(
'raw_title' => 'title',
'results' => $results,
// Zusätzliche Variablen nach Bedarf
));
Verständnis von Render-Arrays
In Drupal 7 bieten Render-Arrays eine strukturierte Möglichkeit, Ausgaben zu erstellen. So erstellt man eins:
$build = array(
'#theme' => 'poll_choices',
'#form' => $form
);
Der Schlüssel '#theme' sagt Drupal, welche Theme-Implementierung zu verwenden ist, während andere Schlüssel die für das Rendering benötigten Daten bereitstellen. Dieser Ansatz bietet eine bessere Flexibilität und Wartbarkeit im Vergleich zur direkten HTML-Ausgabe.
## Definieren von Theme-Implementierungen
Bei der Definition einer Theme-Implementierung, die ein Formular verwendet, würden Sie es so strukturieren:
$hooks['poll_vote'] = array(
'template' => 'poll-vote',
'render element' => 'form',
);
Lassen Sie uns das aufschlüsseln:
- 'template': Gibt den Namen der Vorlagendatei an (ohne die .tpl.php-Erweiterung)
- 'render element': Gibt an, welche Variable die primäre Datenstruktur enthält (in diesem Fall ein Formular)
Theme-Funktionen vs Vorlagendateien
Sie haben zwei Möglichkeiten, die Theme-Ausgabe zu implementieren:
1. Theme-Funktionen:
function theme_poll_results($variables) {
$raw_title = $variables['raw_title'];
$results = $variables['results'];
// Verarbeiten und zurückgeben der thematisierten Ausgabe
return $output;
}
2. Vorlagendateien (poll-results.tpl.php):
<?php
// Variablen werden automatisch aus $variables extrahiert
// Daher sind $raw_title und $results direkt verfügbar
?>
<div class="poll-results">
<h3><?php print $raw_title; ?></h3>
<!-- Zusätzliche thematisierte Ausgabe -->
</div>
Wann man welchen Ansatz verwenden sollte:
Vorlagendateien sind bevorzugt, wenn:
- Sie eine erhebliche HTML-Ausgabe haben
- Sie Markup von Logik trennen möchten
- Die Ausgabestruktur leicht von Theme-Entwicklern geändert werden muss
Theme-Funktionen sind besser, wenn:
- Die Ausgabe relativ einfach ist
- Sie komplexe Logik benötigen, um die Ausgabe zu generieren
- Das Ausgabeformat variiert stark je nach Bedingungen
Best Practices
1. Dokumentieren Sie immer Ihre Variablen:
/**
* Implementiert hook_theme().
*/
function mymodule_theme() {
return array(
'poll_results' => array(
'variables' => array(
'raw_title' => NULL,
'results' => NULL,
),
),
);
}
2. Verwenden Sie aussagekräftige Variablennamen, die ihren Zweck beschreiben
3. Geben Sie Standardwerte an, wenn dies angebracht ist
4. Betrachten Sie Vorverarbeitungsfunktionen für komplexe Logik
5. Konzentrieren Sie sich in Vorlagendateien nur auf die Präsentationslogik
Dieser strukturierte Ansatz zum Theming stellt sicher, dass Ihr Code wartbar bleibt und ermöglicht maximale Flexibilität bei der Anpassung der Ausgabe. Denken Sie daran, dass gute Theming-Praktiken erheblich zur langfristigen Nachhaltigkeit Ihres Drupal-Projekts beitragen.