10.4 Veränderungen gegenüber Drupal 5
Prinzipiell hat sich an PHPTemplate bei der Weiterentwicklung von Drupal 5 zu Drupal 6 nichts geändert. Das erfolgreiche Konzept von PHPTemplate wurde aber weiterverfolgt und verbessert.
Bei Drupal 5 wurden noch die meisten Anweisungen zur Ausgabe von Inhalten in Theme-Funktionen bestimmt. Diese Theme-Funktionen waren und sind zum Teil tief im PHP-Quellcode von Drupal „vergraben“. Um die Darstellung seinen eigenen Vorstellungen anzupassen, war es unumgänglich, diese Funktionen zu überschreiben. Dazu musste man die Funktionen erst einmal in den entsprechenden .module-Dateien finden, um sie dann zu kopieren und in einer eigenen Datei zu überschreiben.
Diese Theme-Funktionen gibt es bei Drupal 6 immer noch. Man kann sie auch weiterhin in einer eigenen Datei überschreiben (template.php). Die Anweisungen zur Ausgabe von
Inhalten werden ab Drupal 6 mehr und mehr in eigene Template-Dateien ausgelagert. Das heißt: Für die meisten Aufgabenstellungen reicht es bei Drupal 6, die entsprechende tpl.php-Datei zu überschreiben. Das Überschreiben von Funktionen ist nur noch in Spezialfällen nötig (siehe Kapitel 10.8).
Dies soll am Beispiel der Funktion, die die Kommentare unterhalb von Beiträgen und Seiten ausgibt, veranschaulicht werden. Zunächst die alte Variante: Bei Drupal 5 wurde die Ausgabe von Kommentaren noch durch die Funktion theme_comment() erledigt (Listing 10.3).
<?php
function theme_comment($comment, $links = array()) {
$output = '<div class="comment'. ($comment->status == COMMENT_NOT_PUBLISHED ? ' comment-unpublished' : '') .'">';
$output .= '<div class="subject">'. l($comment->subject, $_GET['q'], NULL, NULL, "comment-$comment->cid") .' '. theme('mark', $comment->new) ."</div>\n";
$output .= '<div class="credit">'. t('by %a on %b', array('%a' => theme('username', $comment), '%b' => format_date($comment->timestamp))) ."</div>\n";
$output .= '<div class="body">'. $comment->comment .'</div>';
$output .= '<div class="links">'. theme('links', $links) .'</div>';
$output .= '</div>';
return $output;
}
Listing 10.3: aus dem Drupal 5-Core, die Funktion theme_comment()
(modules/comment/comment.module, line 1772)
Zunächst einmal war es schwer, diese Funktion im Quellcode der Datei comment.module zu finden. Und nach dem Finden musste man sie immer noch verstehen, bevor man sie ändern und anpassen konnte.
Das hat sich bei Drupal 6 enorm vereinfacht. Bei Drupal 6 findet man in dem Verzeichnis modules/comment/ eine Datei namens comment.tpl.php (Listing 10.4).
<?php
// $Id: comment.tpl.php,v 1.4.2.1 2008/03/21 21:58:28 goba Exp $
/**
* @file comment.tpl.php
* Default theme implementation for comments.
* Available variables:
* - $author: Comment author. Can be link or plain text.
* - $content: Body of the post.
* - $date: Date and time of posting.
* - $links: Various operational links.
* - $new: New comment marker.
* - $picture: Authors picture.
* - $signature: Authors signature.
* - $status: Comment status. Possible values are:
* comment-unpublished, comment-published or comment-preview.
* - $submitted: By line with date and time.
* - $title: Linked title.
*
* These two variables are provided for context.
* - $comment: Full comment object.
* - $node: Node object the comments are attached to.
*
* @see template_preprocess_comment()
* @see theme_comment()
*/
?>
<div class="comment<?php print ($comment->new) ? ' comment-new' : ''; print ' '. $status ?> clear-block">
<?php print $picture ?>
<?php if ($comment->new): ?>
<span class="new"><?php print $new ?></span>
<?php endif; ?>
<h3><?php print $title ?></h3>
<div class="submitted">
<?php print $submitted ?>
</div>
<div class="content">
<?php print $content ?>
<?php if ($signature): ?>
<div class="user-signature clear-block">
<?php print $signature ?>
</div>
<?php endif; ?>
</div>
<?php print $links ?>
</div>
Listing 10.4: aus dem Drupal 6-Core, die Datei comment.tpl.php
(modules/comment/comment.tpl.php)
Die Datei comment.tpl.php von Drupal 6 macht das gleiche wie die Funktion theme_comment() bei Drupal 5. Die Struktur der neuen tpl.php-Datei von Drupal 6 ist allerdings um Welten leichter zu verstehen. Der Kommentar am Anfang der Datei listet zusätzlich alle zur Verfügung stehenden Variablen auf. Auch das Überschreiben der Ausgabe ist wesentlich einfacher. Man muss lediglich diese Datei in den Ordner seines eigenen Themes kopieren und dort anpassen.
Ein Themer, der sich mit XHTML auskennt und weiß, wie er die XHTML-Struktur der Kommentare aufbauen möchte, kann die Platzhalter einfach in seine neue Struktur einbauen, ohne Theme-Funktionen erst suchen zu müssen und diese anschließend in einer PHP-Datei zu überschreiben.
- Neuen Kommentar schreiben
- 3513 mal gelesen