Drupal 7: mehrere Bilder in Node: 1 Bild in Anrisstext
Aufgabenstellung:
Zur Darstellung von Gallerien soll ein Inhaltstyp erstellt werden, welches ein Feld mit unbegrenzter Anzahl an Bildern enthällt. Diese Bilder sollen auf der Vollansicht mittels Colorbox angezeigt werden.
Für die Teaseransicht (Anrisstext z.B. auf der Startseite) soll jedoch nur das jeweils 1. Bild als Thumbnail angezeigt werden und auf den vollen Beitrag verweisen.
Lösungsweg:
- erstelle den Inhaltstyp bildergallerie (siehe: http://www.klugpopeln.de/images/drupal7/content_type_bildergallerie.jpg )
- kopiere node.tpl.php aus deinem Theme Verzeichnis nach node--bildergallerie.tpl.php (doppelter Bindestrich) im selben Verzeichnis (beide Dateien müssen existieren, nicht umbennen!)
- editiere node--bildergallerie.tpl.php vor der Stelle wo es heißt
print render($content);
- füge davor ein:
if ($teaser)
{
print render($content['field_gallerie_picture'][0]);
hide($content['field_gallerie_picture']);
} - lade die modifizierte Datei auf deinen Server (gleiches Verzeichnis wie node.tpl.php aus deinem Theme)
- Lösche den Cache deiner Seite um das neue Template zu verwenden
- genieße in der Vorschauansicht (Teaser) das jeweils einzelne Bild
- modifiziere den Textumfluss oder Rahmen etc über die css-datei deines Themes
Was bewirkt das eigentlich?
- die node--bildergallerie.tpl.php überschreibt die Standard-Seite für Nodes sofern Inhalt vom Typ bildergallerie angezeigt wird.
- if ($teaser) prüft ob die Teaser-Ansicht (Anrisstext) oder die volle Node angezeigt werden soll (ist false für die volle Node)
- $content enthällt den Inhalt deines Beitrages, so wie es unter Struktur --> Inhaltstyp eingestellt ist.
- hide() nimmt einzelne Felder aus dem $content raus (das Theming überschreibt somit die Systemeinstellung)
- print render($content['field_gallerie_picture'][0]); gibt das erste Bild gemäß deinen Einstellungen unter Felder Verwalten zu deinem Inhaltstyp aus.
Zum besseren Verständnis mal etwas mehr Code aus meinem Template. Im übrigen hab ich das an Bartik gemacht, sollte aber eigentlich mit allen Drupal 7 Themes analog funktionieren.
<div class="content clearfix"<?php print $content_attributes; ?>>
<?php
// We hide the comments and links now so that we can render them later.
hide($content['comments']);
hide($content['links']);
if ($teaser)
{
print render($content['field_gallerie_picture'][0]);
hide($content['field_gallerie_picture']);
}
print render($content);
?>
</div>
Ich hoffe das ist halbwegs nachvollziehbar. Ansonsten bitte kommentieren wo es scheitert und vielleicht auch warum und ich werde versuchen es zu ergänzen.
( Original aus Forumbeitrag, siehe http://www.drupalcenter.de/node/33412 )
Neue Kommentare
vor 2 Tagen 14 Stunden
vor 2 Tagen 16 Stunden
vor 2 Tagen 16 Stunden
vor 2 Tagen 16 Stunden
vor 3 Tagen 14 Stunden
vor 3 Tagen 16 Stunden
vor 4 Tagen 12 Stunden
vor 5 Tagen 6 Stunden
vor 5 Tagen 6 Stunden
vor 5 Tagen 10 Stunden