11.7 Design der Ausgabe verändern

Jetzt sieht das alles ganz hübsch aus, aber meistens soll ja doch noch eine Kleinigkeit anders sein als im Standard. Also werden wir die Ansicht der Einzeldarstellung verändern.

11.7.1 Ein anderes Layout erstellen – direkt im PHP

Wie Sie bereits im Kapitel 10 gesehen haben, können Sie die Node-Ansicht einfach überschreiben und dann Ihre eigenen Designvorstellungen umsetzen. Kopieren Sie dazu die Datei /sites/all/themes/fourseasons/node.tpl.php und nennen die neue Datei /sites/all/themes/fourseasons/node-fahrzeug.tpl.php. Der Inhalt dieser Datei sieht so aus wie in Listing 11.1:

<?php phptemplate_comment_wrapper(NULL, $node->type); ?>
<div id="node-<?php print $node->nid; ?>"
class="node<?php if ($sticky) { print ' sticky'; } ?>
<?php if (!$status) { print ' node-unpublished'; } ?>
<?php if ($page == 0) { print ' teaser'; } ?>">
<?php print $picture ?>
<?php if ($page == 0): ?>
<h2><a href="<?php print $node_url ?>"
title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<?php if ($submitted): ?>
<span class="submitted"><?php print t('!date — !username',

array('!username' => theme('username', $node),
'!date' => format_date($node->created))); ?></span>
<?php endif; ?>
<div class="content">
<?php print $content ?>
</div>
<div class="clear-block clear">
<div class="meta">
<?php if ($taxonomy): ?>
<div class="terms"><?php print $terms ?></div>
<?php endif;?>
</div>
<?php if ($links): ?>
<div class="links"><?php print $links; ?></div>
<?php endif; ?>
</div>
</div>

Listing 11.1: node-fahrzeug.tpl.php

Sie können jetzt die Datei nach Ihren Wünschen anpassen. Sie merken allerdings schnell, dass alle wichtigen Informationen in einem großen Klumpen mit dem Namen $content liegen, auf dessen einzelne Felder Sie nicht direkt zugreifen können. Eine Lösung für PHP-erfahrene Benutzer wäre die Inhaltsanzeige des $node-Objekts:

<pre><?php print_r($node) ?></pre>

Das Ergebnis ist eine Anzeige aller Elemente dieses Arrays in dieser Form:

stdClass Object(

[nid] => 32

[type] => fahrzeug

[language] => de

[uid] => 1

[status] => 1

[created] => 1213205471

[changed] => 1213263292

...

)

Die Anzeige ist sehr hilfreich, es ist jedoch als Anfänger nicht ganz einfach, die richtige Schreibweise für einen Zugriff auf die einzelnen Elemente zu finden. Aber Drupal wäre nicht Drupal, wenn es dafür keine komfortablere Möglichkeit geben würde Smiling.

11.7.2 Installation des Hilfsmoduls Content Template

Das Modul Content Template ist eine echte Hilfe, wenn es um das Design eines Inhalts geht. Laden Sie die Datei contemplate-6.x-0.13.tar.gz von der Projektseite2 oder der CD, entpacken Sie sie in den Ordner /sites/all/modules und aktivieren Sie das Modul (Abbildung 11.9).

Modul Content Template aktivieren
Abbildung 11.9: Modul Content Template aktivieren

Danach finden Sie unter Verwalten – Inhaltsverwaltung – Content Templates eine Auflistung aller Inhaltstypen mit der Möglichkeit, Templates zu erzeugen (Abbildung 11.10).

Übersicht der Templates
Abbildung 11.10: Übersicht der Templates

Klicken Sie neben Fahrzeug auf den Link create template. Im Formularbereich Textkörper – Body Variables finden Sie alle zur Verfügung stehenden Variablen des Inhaltstyps in korrekter PHP-Schreibweise, beispielsweise die Variable für das zweite Fahrzeugbild $node->field_fahrzeugbild[1]['imceimage_path'] und ihr Wert /sites/default/files/u1/nissan_bild2.jpg (Abbildung 11.11).

Variablen im Inhaltstyp Fahrzeug
Abbildung 11.11: Variablen im Inhaltstyp Fahrzeug

Ausgerüstet mit diesen Kenntnissen, können Sie jetzt die Darstellung des Fahrzeuginhaltes mit chirurgischer Präzision vornehmen.

Die Variable

$node->field_fahrzeugbild[1]['imceimage_path']

enthält den Pfad zum zweiten zugeordneten Bild. Arrays fangen in PHP mit einer 0 an, daher die 1. Wenn Sie im Template den PHP-Befehl

<?php
echo $node->field_fahrzeugbild[1]['imceimage_path'];
?>

eingeben wird der Pfad ausgegeben. Da Sie vermutlich nicht den Pfad, sondern das Bild sehen wollen, müssen Sie die Variable in das entsprechende HTML-Tag bauen, beispielsweise so:

<?php
echo '<img src=“'.$node->field_fahrzeugbild[1]
.'“'.['imceimage_path'].'>';
?>


Ihre Bewertung: Nichts Durchschnitt: 3 (2 Stimmen)

Da fehlt ein ID im letzten

Da fehlt ein ID im letzten Text zwischen den beiden Code Beispielen: "Pfad ausgegeben. a Sie vermutlich"

Danke für den Tipp

Nun ist das "D" da

Fehler beim Ausgeben vom Fahrzeugbild

<?php
echo 'field_fahrzeugbild[1]
.'“'.['imceimage_path'].'>';
?>

so funktioniert das ganz nicht :)

so müsste es eigentlich heißen:

<?php echo 'field_fahrzeugbild[1]['imceimage_path'] .'" >'; ?>

Wie nutze ich die Templates?

Moin,

erstmal vielen Dank für das tolle Buch!

Ich habe jetzt ein Template erstellt, aber ich verstehe nicht, wie ich das nutze?

Ich weiß nicht wo ich das entsprechende HTML-Tag einbinden soll!?

Hab ich einfach gerade ein Brett vorm Kopf?

Wäre echt toll, wenn mir das jemand erklären könnte!

Danke und Grüße
Daniel

in den Themes

Im Theme gibt es die .tpl.php Dateien.
Wenn Du einen Inhalttyp überschreibst (so wie in diesem Beispiel) änderst Du das "Template" (die Datei) für diesen Node. Das ist eigentlich alles.
In dieser Datei kannst Du HTML Befehle nutzen so viel Du willst.
Wenn Du das Seitenlayout verändert willst mußt du die page.tpl.php verändern.
Viel Glück

Falsch ausgedrückt

Ich habe mich falsch ausgedrückt. Ich meinte nicht die Templates im Allgemeinen, sondern die Content Templates. Im Beispiel wird das Fahrzeug-Template besprochen, aber ich verstehe nicht, wo die Änderungen eingefügt werden sollen.

node-fahrzeug.tpl.php

In 11.7.1 steht es (einfach hochscrollen).
Die Datei heisst node-fahrzeug.tpl.php und sie muß im entsprechenden Theme Ordner liegen.

OK

Also bedeutet das, dass ich in der node-fahrzeug.tpl.php <?php print $content ?> weglasse und die Seite nach eigenem Belieben aufbaue? Die verfügbaren Variablen finde ich ja unter Content Templates -> Body Variable.

Genau :-)

Genau :-)