Zum Inhalt springen

Kommagetrennte Image Ausgabe

Erstellt am 7. Februar 2011 · 2 Antworten · letzte Antwort am 11. Juli 2011

Tags: Frage

skriptkiddie ·

Ich habe in einem DB-Feld mehrer Image-Dateinamen kommagetrennt stehen also z.B. Bild1.jpg,Bild2.jpg
Das Datensatz Array von findAll() kann ich ausgeben und dort stehen sie auch drinnen.
In meinem Fluid Template mit z.B. {Datensatz.bilder} werden Sie nicht mehr ausgeben.
Woran kann das liegen, dass die Daten nicht an Fluid übergeben werden?

Wird von Extbase eine Methode bereitgestellt um kommagetrennte Bilder auszugeben?

Danke :-)

toifel ·

Ich habe leider keine gefunden und deshalb einen eigenen ViewHelper dafür geschrieben.. vielleicht hilft er Dir ja. Ist noch sehr simpel, aber dafür umso leichter verständlich und erweiterbar.

class Tx_Toisuperdetailed_ViewHelpers_ImagesViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {

	/**
	* ViewHelper für Bildlisten
	*
	* @param string $images Object to iterate over1
	* @param int $width Iteration variable
	* @param int $limit Iteration variable
	* @param int $begin Iteration variable
	* @param string $options Iteration variable
	*/
	public function render($images, $width, $limit = false, $begin = false, $options = false) {
		$path = 'uploads/tx_toisuperdetailed/';
	
		$imgs = explode(',', $images);
		if(sizeof($imgs) > 1) {
			$res   = '';
			$count = 0;
		
			foreach($imgs as $img) {
				if(($limit && $limit <= $count) || ($begin && $begin > $count)) {
					$count++;
					continue;
				}
				
				switch($options) {
					case 'fancybox':
						$res  .= '<a href="'.$path.$img.'" class="fancybox">';
						$end   = '</a>';
						break;
					case '':
						$res  .= ''; 
						$end   = '';
						break;
				}
				
				$res .= '<img width="'.$width.'" src="'.$path.$img.'" alt="Produkt Bild" />'.$end;
				$count++;
			}
		} else {
			$res = '<img width="'.$width.'" src="'.$path.$images.'" alt="Produkt Bild" />';
		}
				
		return $res;		
	}

}

Im Template sieht das ganze dann so aus:

<toi:images images="{entry.images}" width="175" limit="1" begin="2" />

...würde aus der Liste jetzt bspw. nur das 3. Bild auslesen.

Der $path oben muss natürlich geändert werden 😉

einpraegsam.​net ·

Alternative dazu...

Modell

public function getPictures() {
	// return $this->pictures;
	return t3lib_div::trimExplode(',', $this->pictures, 1);
}

Template
1. Bild ausgeben

<f:image src="uploads/tx_ext/{obj.pictures.0}" />

Alle Bilder ausgeben

<f:for each="{obj.pictures}" as="picture">
	<f:image src="uploads/tx_ext/{picture}" />
</f:for>