Tutorials

Einige nützliche Hilfen und Code-Schnipsel, die ich immer wieder benötige und deshalb hier für alle sammle.

Zurück zur Übersicht

TYPO3 Fluid: Verschachtelte Variablen Viewhelper

#Tutorials#TYPO3#PHP

Möchte man in Fluid eine Variable aus 2 zusammenbauen, also mit Hilfe des Keys aus einem Array den Wert bekommen, so ist dies nicht möglich.

Was man denken könnte wäre so ein Ansatz {image.{key}} oder ähnliches. Für dieses Szenario habe ich hier einen Viewhelper geschrieben, der sogar noch etwas mehr kann. Er kann als Property ein Array bekommen und somit den Key aus mehreren Variablen zusammensetzen lassen, inklusive der Angabe eines Seperatoren.

Hier der Code, der in eure Extension unter Classes/ViewHelpers zu finden sein muss. Den Namen der Klasse solltet ihr natürlich euren Bedürfnissen anpassen.


<?php

class Tx_AkTools_ViewHelpers_KeyValueViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
	/**
	 * @param $obj  object Object
	 * @param $prop	string Property
	 */
	 
	public function initializeArguments(){
		$this->registerArgument( 'obj', 'mixed', '');
		$this->registerArgument( 'prop', 'mixed', '');
		$this->registerArgument( 'sep', 'mixed', '');
    } 
	 	 	
	public function render() {
		
		$obj = $this->arguments['obj'];
		$prop = $this->arguments['prop'];
		$sep = $this->arguments['sep'];
		
		if(is_array($prop)) $prop = implode($sep,$prop);
		
		if(is_object($obj)) {
			return $obj->$prop;
		} elseif(is_array($obj)) {
			if(array_key_exists($prop, $obj)) {
				return $obj[$prop];
			}
		}
		return NULL;
	}
}

Und so wird der Viewhelper benutzt


{namespace ak=Tx_AkTools_ViewHelpers}

<!-- Inline-Schreibweise -->
{ak:keyValue(obj: object, prop: key)}

<!-- Inline-Schreibweise mit zusammengesetzem Key -->
{ak:keyValue(obj: object, prop: {0:key1, 1:key2}}, sep:'-' )}

Kommentare

Es gibt noch keine Kommentare. Sei der Erste!

Hinterlasse einen Kommentar

Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Kommentar wird gespeichert
Danke für deinen Kommentar! Sobald er freigegeben wurde erscheint er hier.