Zum Inhalt springen

Extbase - ViewHelper gesucht: Vergleich mit vorherigem Wert

Erstellt am 29. August 2013 · 3 Antworten · letzte Antwort am 31. August 2013

Tags: Fluid, ViewHelper, TYPO3 6, Frage

marc-willmann ·

In einem Fluid-Template existiert eine f:for-Schleife, die die Inhalte eines Arrays ausgibt. Nun soll ein Vergleich des aktuellen Wertes mit dem Wert aus dem vorherigen Durchlauf durchgeführt werden (z.B. um keine doppelten Werte auszugeben).

Gibt's da einen ViewHelper oder muss ich was eigenes schreiben?

Vielen Dank im Voraus

Marc

einpraegsam.​net ·

Ich wüsste nicht, dass es hierzu bereits einen ViewHelper gibt.
Die Frage ist auch, ob man die Duplikate nicht bereits vor der Schleife entfernen sollte (ViewHelper oder bereits im Controller oder Repository).

marc-willmann ·

Sehe ich ähnlich - das ist eine Aufgabe für den Controller. Das ist bei dem Projekt aber in den Brunnen gefallen; ich brauche die Werte später im ViewHelper nochmals und der Controller dreht schon viel zu viel überflüssige Extrarunden. :-(

Ich sehe das Problem auch beim Datenmodell/Controller, aber irgendwie muss es jetzt fix laufen. Für ein - eigentlich nötiges - Refactoring fehlt die Zeit und das Budget.

Gibt es denn einen ViewHelper, der Duplikate entfernt? Das würde mir ja schon sehr helfen...

Danke schon mal

einpraegsam.​net ·

Im Prinzip musst du dir einen ViewHelper bauen, der z.B. eine neue Variable ermöglicht. Diesem übermittelst du die vorhandene Variable.

Hier mal ein ViewHelper (ins Blaue, ungetestet):

class RemoveDuplicatesViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {

	/**
	 * Remove Duplicated Values in a new variable
	 * 
	 * @param array $objects
	 * @param string $field
	 * @return string Rendered string
	 */
	public function render($objects, $field = 'title') {
		$new = array();
		foreach ($objects as $object) {
			$new[$object->{'get' . ucfirst($field)}()] = $object;
		}

		$this->templateVariableContainer->add('neuervariablenname', $new);
		return $this->renderChildren();
	}
}
<f:debug>{objects}</f:debug>
<deinnamespace:RemoveDuplicates objects="{objects}">
	<f:debug>{neuervariablenname}</f:debug>
</deinnamespace:RemoveDuplicates>