Node mit einem Bild darunter kleine Vorschaubilder
Eingetragen von hunggaldier (40)
am 11.09.2007 - 12:00 Uhr in
am 11.09.2007 - 12:00 Uhr in
Hallo! Ich habe ein begehrtes und schwieriges Thema.
Ich möchte das z.B. beim Inhaltytyp Blog nur ein Bild (Mehrfachauswahl-Image-Feld) im Node angezeigt wird und alle weiteren darunter wie eine kleine Galerie (kein Einbinden eines Galerie-Moduls).
So sollte es aussehen: http://www.austrovespa.at/galerie.jpg
Das möchte ich verhindern: http://www.austrovespa.at/galerie_nein.jpg
Habe im Modul Forum erfahren, dass man das mit "Theming" anpassen kann: http://www.drupalcenter.de/node/5226
Hat jemand eine Idee dazu - bzw. einen Hinweis wo ich anfangen soll!
- Anmelden oder Registrieren um Kommentare zu schreiben
- den Inhaltstyp mit einem
am 11.09.2007 - 12:09 Uhr
- den Inhaltstyp mit einem Multi-Value Image Field versehen
- zwei Settings im Image Cache Modul erstellen (z.B. "vorschau_gross", "vorschau_klein")
- die node-[Inhaltstyp].tpl.php anpassen (und schön mit HTML und CSS spielen)
Q&D Code-Schnipsel:
foreach ($node->field_bild as $bild) { // wenn das Image-Feld 'bild' heißt
$filepath = $bild['filepath'];
$alt = $bild['alt'];
$title = $bild['title'];
print theme('imagecache', 'vorschau_gross', $filepath, $alt, $title);
}
"I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -Alan Kay
Suchmaschinenoptimierung (SEO) & Drupal
Hab ich gemacht - allerdings
am 11.09.2007 - 12:32 Uhr
Hab ich gemacht - allerdings wird nur ein Bild angezeigt, wenn man im Display-Fields (Anrisstext und Full) auch vorschau_gross ausgewählt wird. Also der Code-Schnipsel für vorschau_klein funktioniert nicht (da nicht im Inhaltstyp Display Fields eingetragen Bilder werden nicht gecacht).
Ausserdem werden alle Bilder in der Größe angezeigt. Oder versteh ich wieder mal was falsch
Heimo Runggaldier
Du musst natürlich schon ne
am 11.09.2007 - 12:41 Uhr
Du musst natürlich schon ne Fallunterscheidung machen. Nen Zähler mitlaufen lassen und im ersten Durchlauf per Image Cache den großen Filter nutzen, danach den kleinen..
Es sollte ja nur ein Code-Schnipsel zur Verdeutlichung sein, wie man programmatisch auf Bilder zugreifen und sie via Image Cache skalieren kann.
P.S.:
Ich arbeite auch nicht mit Contemplate, weil mir die Projekte sonst zu unübersichtlich sind, wenn an zig verschiedenen Stellen das Layout beeinflusst wird. Dann hab ich lieber alles in Dateiform in meinem Theme-Ordner.
"I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -Alan Kay
Suchmaschinenoptimierung (SEO) & Drupal
OK - Klar! Aber woher
am 11.09.2007 - 12:43 Uhr
OK - Klar! Aber woher bekomme ich die gecachten Fotos? Wie beschrieben werden die Bilder nur im Ordner vorschau_klein erstellt wenn man im Display-Field Anrisstext und/oder Full vorschau_klein angibt.
Dann ist das erste Foto auch wieder klein!!
Heimo Runggaldier
OK-Alles klar
am 11.09.2007 - 12:50 Uhr
Nur noch 1. Wie schaffe ich es den Thickbox link einzubinden. Bei der Ausgabe werden die Bilder ohne Link angezeigt!
DANKE!!!!!
Heimo Runggaldier
hunggaldier wrote:
am 11.09.2007 - 12:51 Uhr
OK - Klar! Aber woher bekomme ich die gecachten Fotos?
Folgende Zeile liefert den kompletten Code (img-Tag) für das Bild in der entsprechenden Größe:
theme('imagecache', 'vorschau_gross', $filepath, $alt, $title)
"I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -Alan Kay
Suchmaschinenoptimierung (SEO) & Drupal
hunggaldier wrote: Nur noch
am 11.09.2007 - 12:58 Uhr
Nur noch 1. Wie schaffe ich es den Thickbox link einzubinden. Bei der Ausgabe werden die Bilder ohne Link angezeigt!
DANKE!!!!!
Z.B. so:
$html .= '<a href="/'.$filepath.'" rel="'.$node->type.'-'.$node->nid.'" title="'.$alt.'" class="thickbox">'.theme('imagecache', 'breite_105px_hoehe_80px', $filepath, $alt, $title).'</a>';
Anmerkung:
Setzt man die Class auf thickbox, gibts beim Klick die Großansicht. Alle Elemente der Seite, die die Class thickbox gesetzt haben und denselben rel-Eintrag haben, können dann in der Großansicht vor- und zurück geschaltet werden. Darum benutze ich hier Typ und ID im rel-Attribut, da ich teils mehrere Gallerien auf einer Seite darstelle...
$filepath ist dabei der PFad des Original-Bildes aus dem ganz obigen Schnipsel...
"I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -Alan Kay
Suchmaschinenoptimierung (SEO) & Drupal
Eines verstehe ich noch
am 11.09.2007 - 14:34 Uhr
Eines verstehe ich noch immer nicht: Die Bilder "vorschau_klein" werden nicht angezeigt. Bei mir nennen sich die zwei Größen Thickbox und Vorschau. Aber egal. Trotzdem werden im Ordner "Vorschau" keine kleinen Bilder erzeugt ich habe die Auswahl "Vorschau" beim bild_field ja auch nicht ausgewählt sondern "Thickbox". Wie werden die Bilder angelegt? Wenn Du auf http://www.austrovespa.at/drupal schaust siehst Du, dass die Bilder fehlen.
Ich bin lässtig aber wenn Du vielleicht was fertiges hast würde ich dir das bezahlen!! Ich sehe kein Ende.
DANKE!
Heimo Runggaldier
Hm, ich werde aus 'ich habe
am 11.09.2007 - 14:49 Uhr
Hm, ich werde aus 'ich habe die Auswahl "Vorschau" beim bild_field ja auch nicht ausgewählt sondern "Thickbox"' nicht so ganz schlau.
Prinzipiell hast du was in dieser Art:
$index = 0;
foreach ($node->field_bild as $bild) { // wenn das Image-Feld 'bild' heißt
$index++;
$filepath = $bild['filepath'];
$alt = $bild['alt'];
$title = $bild['title'];
if ($index == 1) {
// das erste Bild in groß
print '<a href="/'.$filepath.'" rel="'.$node->type.'-'.$node->nid.'" title="'.$alt.'" class="thickbox">'.theme('imagecache', 'gross', $filepath, $alt, $title).'</a>';
} else {
// die folgenden Bilder klein
print '<a href="/'.$filepath.'" rel="'.$node->type.'-'.$node->nid.'" title="'.$alt.'" class="thickbox">'.theme('imagecache', 'klein', $filepath, $alt, $title).'</a>';
}
}
"I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -Alan Kay
Suchmaschinenoptimierung (SEO) & Drupal
SUPER!!
am 11.09.2007 - 15:06 Uhr
print 'type.'-'.$node->nid.'" title="'.$alt.'" class="thickbox">'.theme('imagecache', 'gross', $filepath, $alt, $title).'';
Ich habe die Drupal installation im Unterordner "drupal" der filepath gibt den Unterordner nicht mit aus. Wenn ich den Ordner "drupal" eintrage kommt er doppelt.
Beispiel: http://www.austrovespa.at/drupal/drupal/files/alex1_0.jpg
Heimo Runggaldier
Stell ggf. den $base_path
am 11.09.2007 - 15:14 Uhr
Stell ggf. den $base_path voran.
"I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -Alan Kay
Suchmaschinenoptimierung (SEO) & Drupal
Bilder
am 11.09.2007 - 15:58 Uhr
Das funktioniert wirklich perfekt. Hab jetzt das node.tpl.php kopiert und umbennent. Wie kann ich die "Originalbilder" ausblenden bzw. nur den neuen Code (Bilder) anzeigen lassen. Jetzt werden beide angezeigt.
Folgenden Code habe ich drin stehen:
<div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>">
<?php if ($picture) {
print $picture;
}?>
<?php if ($page == 0) { ?><h2 class="title"><a href="<?php print $node_url?>"><?php print $title?></a></h2><?php }; ?>
<span class="submitted"><?php print $submitted?></span>
<?php
drupal_add_js('misc/collapse.js');
drupal_add_js('misc/drupal.js');
?>
<?php if ($terms) { ?>
<fieldset class="collapsible collapsed">
<legend><a href="#">Kategorie</a></legend>
<div class="fieldset-wrapper">
<?php print $terms?>
</div>
</fieldset>
<?php };
$index = 0;
foreach ($node->field_bild as $bild) { // wenn das Image-Feld 'bild' heißt
$index++;
$filepath = $bild['filepath'];
$alt = $bild['alt'];
$title = $bild['title'];
if ($index == 1) {
// das erste Bild in groß
print '<a href="/drupal/'.$filepath.'" rel="'.$node->type.'-'.$node->nid.'" title="'.$alt.'" class="thickbox">'.theme('imagecache', 'Thickbox', $filepath, $alt, $title).'</a>';
} else {
// die folgenden Bilder klein
print '<a href="/drupal/'.$filepath.'" rel="'.$node->type.'-'.$node->nid.'" title="'.$alt.'" class="thickbox">'.theme('imagecache', 'IchBinDabei', $filepath, $alt, $title).'</a>';
}
}
?>
<!--<span class="taxonomy"><?php print $terms?></span>-->
<div class="content"><?php print $content?></div>
<?php if ($links) { ?><div class="links">» <?php print $links?></div><?php }; ?>
</div>
Dann sind wir fertig - DANKE NOCHMALS!! LG Heimo
Heimo Runggaldier
Das liegt daran, dass du
am 11.09.2007 - 16:23 Uhr
Das liegt daran, dass du $content ausgibst. Das enthält bereits den fertig gerenderten Inhalt vom Node (bzw. den des Teasers) inkl. der Bilder. Wenn dein Node ein CCK-Inhaltstyp ist, kannst du ja stattdessen einfach das Feld mit dem Text direkt ausgeben.
"I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -Alan Kay
Suchmaschinenoptimierung (SEO) & Drupal
GESCHAFFT
am 11.09.2007 - 21:34 Uhr
DANKE NOCHMALS!! BIST WIRKLICH SEHR GUT DRAUF!!
Heimo Runggaldier