[gelöst] CCK Filefield: 3 Bilder hochladen -> Wie greife ich in node-meinhaus.tpl.php drauf zu?
Eingetragen von PhilB (139)
am 27.04.2010 - 13:28 Uhr in
am 27.04.2010 - 13:28 Uhr in
Hallo,
ich hoffe ihr könnt mir Helfen.
Ich habe einen Inhaltstypen erstellt indem unter anderem 3 Bilder hochgeladen werden können. Das klappt soweit auch wunderbar.
Jetzt habe ich den Inhaltstyp gethemt und weiß nun nicht wie ich die Bilder laden kann.
mit
<?php print $form->field_bild1['0']['filepath'] ?>
kann ich zB den Pfad anzeigen - das funktioniert. Wenn ich nun das PHP Schnipsel oder testweise den ausgeschriebenen Pfad in folgenden Code einfüge wird leider kein Bild angezeigt.
<img src="sites/default/files/3238497111_b700500f63.jpg" alt="Test" title="Test">
<?php print theme('imagecache', 'Thumbnail','sites/default/files/3238497111_b700500f63.jpg', $alt, $title, $attributes); ?>
funktioniert beides nicht. Letztere Zeile hab ich in irgendeinen Beitrag gefunden. Hat es Vorteile das ich Imagecache installiert habe? In wieweit beeinflusst ImageCache die Darstellung?
Danke,
gruß Phil
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi Phil,
am 27.04.2010 - 13:40 Uhr
1) in der node-wasauchimmer.tpl.php kannst du das Bild per $node->field_bild1... ausgeben. Allerdings du schreibst dass 3 Bilder hochgeladen wurden. Daher brauchst du eine foreach-Schleife. Ungefähr so:
foreach($node->field_bild1 as $bild){ pint '<img src="'.$bild[filepath].'" />'; }
2) Image-Cache bietet dir nun die Möglichkeit nicht das Original-Bild, sondern je nach Preset eine Verkleinerte bzw. veränderte Version des Bildes auszugeben. Unabhängig davon ob das Bild überhaupt so ausgegeben werden soll, kannst du deine node.tpl dann so abändern
foreach($node->field_bild1 as $bild){ pint '<img src="'.conf_path().'/files/imagecache/presetname/'.$bild[filename].'" />'; }
Damit generiert dir ImageCache das Bild nach den Vorgaben des Presets
Allerdings viel Einfacher gehts wenn du die Ausgabe in den Inhaltstypen definierst. Dann brauchst du in der node.tpl gar nichts machen.
Inhaltstypen / z.B. Artikel / Ansicht ...
Viel Spaß
Dirk
Ergänzender Tipp
am 27.04.2010 - 13:42 Uhr
Such mal nach dem Modul drupalforfirebug und der Firebug-Erweiterung Drupal. Dann kannst du auch ohne Devel-Modul sämtliche Variablen der Node einsehen. Das vereinfacht das Templating auf der Ebene der node.tpl ungemein.
Hallo Dirk, vielen Dank für
am 27.04.2010 - 14:05 Uhr
Hallo Dirk,
vielen Dank für deine schnelle und ausführliche Hilfe. Leider klappt es noch nicht ganz.
in der node-wasauchimmer.tpl.php kannst du das Bild per $node->field_bild1... ausgeben.
Wenn ich das so mache, wird leider nur das Wort "Array" ausgegeben.
Damit generiert dir ImageCache das Bild nach den Vorgaben des Presets
Aber das macht ImageCache schon beim Upload des Bildes und ich kann bei der Ausgabe darauf zugreifen, oder?
Also ImageCache greift nur beim Upload ein - kann man das so sagen?
Danke,
gruß Phil
PS Danke auch für den Tipp mit Firebug, werd ich mir gleich anschauen.
Nicht ganz
am 27.04.2010 - 14:41 Uhr
Imagecache ist eigentlich getrennt vom File-Upload zusehen. Da es lediglich ein vorhandenes Bild, wie der Name schon sagt, cached. Nicht mehr und nicht weniger. Von welcher Quelle ist dabei sekundär.
Die Array-Ausgabe ist richtig. Das bedeutet lediglich, dass dies nicht der letzte Zweig des Datenstroms ist, sondern noch viele Werte folgen. Somit musst du das ganze mit der foreach-Schleife durchlaufen.
Vielen Dank
am 27.04.2010 - 16:34 Uhr
Hallo Dirk,
vielen Dank für deine Hilfe. Würdest du mir nochmal weiterhelfen?
Leider klappt es bei mir nicht so wie du schreibst. Ich habe jetzt Testweise einen Inhaltstyp erstellt: /admin/content/node-type/profile/fields/field_profilfoto
Ich habe keine Einstellungen geändert. Unter "Felder anzeigen" ist als Ausgabe auch das Bild eingestellt.
Folgenden Code habe ich in die node-profile.tpl.php geschrieben:
<?php foreach($node->field_profilfoto as $bild){ print "<img src=\"".$bild['0']['filepath']."\" />"; } ?>
Mit dieser Anweisung klappt es nicht. Ich sehe keine Image, kein Platzhalter, einfach nichts. Cache auch geleert.
Auch mit der Anweisung klappt es nicht :(
<img src="<?php $node->field_profilfoto['0']['filepath']?>" />
<?php print $node->field_profilfoto['0']['view']; ?>
Nur mit dieser Anweisung klappt es. Allerdings wird dann das Foto in Originalgröße ausgegeben. Ich denke hier käme dann ImageCache zum Einsatz.
Unter admin/build/imagecache habe ich eine neue Voreinstellung "Profilfoto" angelegt. In dieser wird jedes Bild auf eine Breite von 200px skaliert. Aber wie verknüpfe ich nun ImageCache mit obiger Ausgabe? Das ist mir leider nicht ganz schlüssig.
Vielen Dank für deine Geduld,
gruß Phil
Probier mal: <?phpglobal
am 27.04.2010 - 17:09 Uhr
Probier mal:
<?php
global $base_url;
foreach($node->field_profilfoto as $bild){
print '<img src="';
print $base_url.'/'.conf_path().'/files/imagecache/profilfoto/'.$bild[filename]; // Wichtig: Imagecache so aufrufen! Nicht über Filepath! Bestimme den Pfad manuell.
print '" />';
} ?>
Weitere Erklärungen:
$base_url = http://www.deinedomain.de
conf_path() = Dein Config-Pfad, im normal Fall /sites/default/
Wenn du Die Bilder in einen Seperaten Ordner hochgeladen hast, also nicht direkt in den Files-Ordner, trage diesen nach profilfoto ein.
Z.B. /files/imagecache/profilfoto/Profilfoto/....
Das erste "profilfoto" bestimmt das Imagecache Preset, dass Zweite den Ordner den du im CCK-Feld bestimmt hast.
Der Fehler lag
print "<img src=\"".$bild['0']['filepath']."\" />"; } ?>
in der [0], die gibt nur die Array-Position aus. Das brauchst du bei der foreach-Abfrage nicht, dafür ist diese da. Sie geht jeden Array durch und ergänzt die [0] und [1] und wieviele Bilder du sonst noch hast.
Viel Spaß
Super es klappt
am 27.04.2010 - 17:31 Uhr
Hallo Dirk,
vielen Dank für deine Geduld und tolle Hilfe.
Jetzt klappt alles. Schönen Abend noch,
gruß Phil