Drupal7: mehrere Bilder in Node: 1 Bild in Anrisstext
am 06.02.2011 - 09:06 Uhr in
Hi!
Ich bin dabei mit Drupal 7 eine Gallerie zu basteln. Dazu hänge ich die Bilder an eine Node an und organisiere die nodes mittels Views und Taxonomy und gebe die Bilder mittels colorbox aus.
Das klappt soweit wie gewünscht, aber: Ich habe ein Imagefield pro node, welches eine unbegrenzte Anzahl an Bildern erlaubt. Nun werden leider in der Anrissansicht (teaser) alle Bilder angezeigt. Ich hätte es gerne aber auch eine bestimmte Anzahl begrenzt (vorzugsweise 1).
Habe ich diese Einstellmöglichkeit übersehen oder gibt es das so einfach nicht? Auf der Suche nach einer Lösung bin ich über ein paar Workarounds gestolpert, aber alle samt gefallen mir nicht wirklich, da es das immer hinten rum macht:
- 2 Bildfelder anhängen, No1 begrenzt auf 1 als Preview und No2 unbegrenzt für den Rest. Bei der Ausgabe als volle Nodeansicht dann einfach beider hintereinander ausgeben
- mittels CSS alles ausser dem ersten ausblenden (bin mir aber unsicher ob das überhaupt geht, da es keine klasse first etc gibt. Müstte ich noch rumprobieren
- villeicht geht es auch noch über das Theme
Meine bisherigen Versuche sind auf der Testseite zu finden. Ist noch ziemlich roh und einiges zu tun (insb. theming). Aber ich fange ja gerade erst an.
Zurück zur Basisfrage: ist es möglich ein multiple image field aus einer Node für den Anrisstext auf 1 Bild zu beschränken?
Danke für weitere Ideen oder gar Lösungen :)
- Anmelden oder Registrieren um Kommentare zu schreiben
Du könntest in der
am 06.02.2011 - 12:47 Uhr
Du könntest in der Feld-Anzeige (zu finden bei den Einstellungen des Inhaltstyps, also dort, wo man auch neue Felder einfügt usw.) die Anzeige des Imagefields im Teaser komplett unterbinden, dann gibt das Imagefield von sich aus gar nichts aus.
Dann nimmt man sich eine entsprechende node-Nodetype.tpl.php, prüft darin, ob gerade der Teaser angezeigt werden soll und gibt dafür entsprechend das erste Bild und den Content aus. Dann wird das Bild über die Template-Datei ausgegeben. Für Komplett-Ansicht des Nodes kann man einfach nur den Content ausgeben, weil da das Imagefield die Bilder mit im Content einbindet.
Vieleicht hilft das hier:
am 06.02.2011 - 12:51 Uhr
Vieleicht hilft das hier: http://drupal.org/node/622944#comment-3442292
Drupal 7 Screencasts in deutsch!
Hi Exterior, danke für deinen
am 13.02.2011 - 07:52 Uhr
Hi Exterior,
danke für deinen Hinweis. Das wird der Weg, den ich bestreiten werde.
Der Vollständigkeithalber sei erwähnt, dass sich in Drupal 7 die Syntax für die Theming-dateien geändert hat. Es heisst nun node--Nodetype.tpl.php (also 2 Bindestriche).
Das hat mich leider Stunden gekostet weil es recht schlecht oder selten beschrieben ist. (und immer brav den Cache löschen, nachdem man ne neue .tpl.php hochgeladen oder geändert hat)
Sobald ich meine Lösung fertig habe werde ich sie hier posten. Noch scheitere ich an dem ordentlichen Ansprechen des Bildes aus dem Imagefield, da ich Imagecache und die Spracheinstellungen gerne berücksichtigt hätte. Somit noch etwas probieren und lesen vor mir ;)
Ho Thoor auch dir Danke für
am 13.02.2011 - 07:51 Uhr
Ho Thoor
auch dir Danke für deinen Kommentar, aber ich denke es gibt 2 Dinge zu erwähnen:
1) es funktioniert derzeit nur mit der DEV-Version von Views nicht mit der aktuell releasten
2) Views ist denke ich nicht dafür zuständig Teaser eines Nodetyps zu überschreiben. Ich müsste dann alle Seiten durch Views schleusen und es darüber machen. Das ist mir aber ehrlich gesagt zu Aufwendig, daher gehe ich den Weg über die Template-Dateien
Als weitere Option sei übrigens auf Contemplate hingewiesen, was jedoch für Drupal 7 noch sehr sehr roh ist und sich nicht ohne modifikation installieren lassen soll. Von daher für mich ausgeschieden.
Vielleicht hilft Dir auch
am 13.02.2011 - 09:30 Uhr
Vielleicht hilft Dir auch mein Lösungsvorschlag unter
http://drupal7.michas-cms-testseite.de
im Buch unter Beispiel 02 - "Die "Ein-Node-Bildergalerie"
die/meine Lösung
am 13.02.2011 - 10:30 Uhr
Hiho,
also ich bin am Ziel. Ich danke allen, die mir auf meinem Weg geholfen haben. Wie so oft ist es in Drupal 7 deutlich einfacher als angenommen. Aber die (noch fehlende) Doku macht es entsprechend schwierig die richtige Lösung zu finden.
Um es der Nachwelt zu vereinfachen folgt hier mal eine art Howto wie ich zum Ziel gekommen bin.
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:
print render($content);
if ($teaser)
{
print render($content['field_gallerie_picture'][0]);
hide($content['field_gallerie_picture']);
}
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.
Danke allen, die mir auf meinem Weg behilflich waren.
Super Sache, poste die
am 13.02.2011 - 14:19 Uhr
Super Sache, poste die Anleitung doch ins Handbuch, dort ist sie besser aufgehoben und versinkt nicht unter anderen Threads :)
Einfach mal diesen Link aufrufen: http://www.drupalcenter.de/handbuch/147
Und dann unten auf "Untergeordnete Seite hinzufügen" klicken.
oh, danke für den Hinweis.
am 13.02.2011 - 14:45 Uhr
oh, danke für den Hinweis. Hab ich doch glatt gemacht :)
http://www.drupalcenter.de/handbuch/33559
Manchen reicht vielleicht auch einfach ein 2. Bild-Feld
am 13.02.2011 - 15:12 Uhr
Hallo,
zunächst stand ich auch vor diesen Anforderungen. Aber ich kann mir vorstellen, dass wir vielleicht mal ein anderes Bild für den Anrißtrext möchten, als durch irgendeinen Programmeingriff automatisch festgelegt.
Daher habe ich einen Inhaltstypen "Galerie" mit einem einfachen Bildfeld und Beschränkung auf 1 angelegt,
sowie ein weiteres Bildfeld mit der Bezeichnung Galerie mit unbegrenzt angelegt.
In der Ansicht lege ich wieder fest, dass im Anrißtext das Bildfeld als Thumpnail gezeigt wird etc.
Und in der Vollansicht ist die Reihenfolge dann: Titel, Bild, Body, Galerie (auch natürlich dargestellt mit colorbox).
Sowas ist natürlich die
am 13.02.2011 - 15:48 Uhr
Sowas ist natürlich die einfachste Lösung (sowas verwende ich auch, also ein extra Titelbild-Feld) aber dafür benötigt man eben ein extra Feld. Hat beides seine Daseinsberechtigung. Das eine ist flexibler, dafür ist das andere einfacher für den Endnutzer und spart Speicherplatz.
Wieso spart das Speicherplatz?
am 13.02.2011 - 16:02 Uhr
Das eine Bild, das ich für den Anrißtext und für die Vollansicht nehme, braucht doch deshalb nicht mehr Speicherplatz als die unbeschränkt in die Galerie eingespeisten Bilder. - Oder doch?
Das könnte ich nur annehmen, wenn ich das Bild doppelt hoch lade. Aber wenn ich es im Anrißtext und neben dem Body-Text zeige, brauche ich es ja nicht auch nochmal in die darunter angebrachte Galerie rein packen.
Beispiel: Variante 1 - Man
am 13.02.2011 - 17:29 Uhr
Beispiel:
Variante 1 - Man zeigt das 1. Bild der Galerie im Teaser über das Template an
Man läd 30 Bilder in die Galerie
--> Das erste Bild wird im Teaser angezeigt, auf der Platte liegen 30 Bilder
Variante 2 - man zeigt ein extra Titelbild an
Man läd 30 Bilder in die Galerie
--> Das Titelbild wird in ein extra Feld geladen --> Es liegen 30 Galerie-Bilder + das Titelbild auf der Festplatte --> mehr Speicherverbrauch
Aber wenn ich es im Anrißtext und neben dem Body-Text zeige, brauche ich es ja nicht auch nochmal in die darunter angebrachte Galerie rein packen.
Damit geht die klare Trennung der Galerie-Bilder flöten, das finde ich persönlich z. B. nicht gut. Bei den Galerie-Bildern sollte das angezeigt werden, was ich als Galerie-Bilder hochlade. Ein Galerie-Bild ist ein Galerie-Bild und ein Titelbild eben nicht - meine Meinung.
Also kein vermehrter Speicherplatz.
am 13.02.2011 - 18:44 Uhr
Danke für Deine Antwort. Ich fürchtete schon, bei mir läge ein Denkfehler vor.
Variante 2 - man zeigt ein extra Titelbild an
Man läd 30 Bilder in die Galerie
--> Das Titelbild wird in ein extra Feld geladen --> Es liegen 30 Galerie-Bilder + das Titelbild auf der Festplatte --> mehr Speicherverbrauch
Aha deshalb der vermehrte Speicherplatz. Mein Vorschlag beruhte natürlich, um bei Deinem Beispiel zu bleiben, auf 1 "Titelbild" und 29 Galeriebildern. - Was also doch kein vermehrter Speicherplatz darstellt.
Wie gesagt, kann man so
am 13.02.2011 - 19:12 Uhr
Wie gesagt, kann man so machen, würde ich persönlich allerdings nicht in Erwägung ziehen, weil ich es nicht mag, Bilder in getrennte Felder zu laden und sie dann zusammen zu werfen. Wenn ich zwei Felder verwende, würde ich auch eine klare Trennung festlegen - Das Titelbild wird nur als solches gezeigt und wird nicht nebenbei noch als Galerie-Bild angezeigt. Und bei den Galerie-Bildern werden nur die Bilder angezeigt, die man auch als solche hochläd. Beides getrennt hochzuladen und getrennt zu behandeln aber dann zusammen als Galerie-Bilder anzuzeigen finde ich zu durcheinander.
Aber wie gesagt, das ist meine persönliche Meinung und hängt mit meinen Vorlieben zusammen, man kann es natürlich trotzdem so machen ;) Aber ich "verschwende" dann lieber etwas Speicherplatz zu Gunsten einer klareren Struktur oder würde einfach das erste Bild der Galerie-Bilder im Teaser anzeigen.
Bin völlig Deiner Meinung.
am 13.02.2011 - 22:26 Uhr
Bin völlig Deiner Meinung. Das heißt aber in seiner Konsequenz, dass Du dann doch auch nicht einfach Galeriebild als Titelbild verwendest, um nicht zu sagen, "missbrauchst"?
Das Titelbild muß ja erst mal die gesamte Galerie repräsentieren. Das kann natürlich mal eines der Galeriebilder (oder ein Ausschnitt daraus) sein, muß aber nicht.
Zum Beispiel bei meiner Sternzeichenparty zeigen sich die 13 Puppen in ihren 12 Sternzeichenkostümen in der Galerie von allen 4 Seiten.
Aber fürs Titelbild mussten sie dann noch für ein Gruppenbild posieren.
Oder bei meiner Anleitung zum Kurbelanfang, da habe ich das Bild heraus gestellt, das ich sonst tatsächlich nach jedem Bild hätte dazwischen schieben müssen. Weil sich dieser Grifff immer wiederholt.
Will sagen, ich machte automatisch gleich auch Titelbilder, wenn ich in Serie fotografiere. Und tatsächlich möchte ich mein Titelbild nicht unbedingt in der Galerie haben, sondern lege Wert auf seinen speziellen Zweck und daher den gesonderten Platz.
Dies war natürlich auch nur meine persönliche Meinung. Damit Deine nicht so alleine ist ;-)
mehrere Wege fuehren nach Drupal
am 14.02.2011 - 04:36 Uhr
Hiho,
wie in Drupal ueblich fuehren mehrere Wege zum Ziel. Der von mir skizzierte Weg beschreibt denke ich aber einen durchaus ueblichen Weg, den viele Gallerien (ausserhalb von Drupal) so beschreiten. Natuerlich gibt es andere Loesungen, die sicher auch ihre Daseinsberechtigung haben. Fuer meine Zwecke stellt diese Loesung jedoch das Optimum dar, da es fuer den Benutzer leicht und eingaengig ist. Sollte der Administrator mal eingriff nehmen wollen, so kann die Reihenfolge ueber ein Edit der Node angepasst werden, was sich auch auf das Vorschaubild auswirkt.
Von ungewollten Umsortierungen aus dem System heraus habe ich bisher noch nichts feststellen koennen. Mag aber sein, dass andere Module (als die meinigen) z.B. nach Dateinamen sortieren und somit meine (manuelle) Reihenfolge vom Hochladen oder umsortieren aendert.
Mit meinen Modulen geschieht es bislang nicht, somit finde ich die Loesung fuer mich durchaus elegant.