Zum Inhalt springen

Fluid condition erstellen nach Bildtyp

Erstellt am 5. November 2014 · 4 Antworten · letzte Antwort am 10. November 2014

Tags: Fluid, ViewHelper, Frage

poedder ·

Hi zusammen,

ich habe gerade ein Projekt übernommen, in welchem Fluid eingesetzt wird. Wirklich charmant - aber auch total neu für mich!

Allerdings gibt es eine Sache zu lösen, die ich so nicht finden konnte in der Doku bzw. schon gefunden habe, dass es einen eigenen Weg dahin geben muss.

Problemstellung:
Bilder werden im Template "resized", egal was das für Bilder jetzt sind: jpg, png, gif.
Gif-Dateien sollen jedoch nicht resized werden, da diese alle animierte gifs sind und somit Ihre Animation verlieren.

Mein Ansatz ist hierbei:
Wenn die "file-extension" einem gif entspricht, wird das Bild mittels image-tag und original-source geschrieben, ansonsten übernimmt fluid dies.

irgendwie sowas dann:

<f:if condition="{image.extension} != 'gif'">
	  				<f:then>

	    				<f:image src="{image.url}" alt="{image.alternative}" title="{image.title}" width="860" />
	  				</f:then>
	  				<f:else>
	       				<img src="{image.url}" width="860" alt="{image.alternative}" />
	  				</f:else>
				</f:if>

Natürlich gibt es keine attribut image.extension also muss ich das irgendwie herleiten.

Über dieses bin ich zu keinem Ergebnis gekommen, bzw. wird dies direkt in den HTML-Code ohne Interpretation geschrieben:

{v:condition.string.contains(then: [mixed], else: [mixed], haystack: 'NULL', needle: [mixed])}

Wie kann ich denn auf die {image.url} eine explode Funktion anwenden, um die Dateiendung als String mit "gif" zu vergleichen.

Kann mir jemand einen Anstoss geben, wie ich hier vorgehen kann?
Fehlen Infos?

Danke schon einmal für jede Hilfe!

Patrick

jenses ·
poedder schrieb

Über dieses bin ich zu keinem Ergebnis gekommen, bzw. wird dies direkt in den HTML-Code ohne Interpretation geschrieben:

{v:condition.string.contains(then: [mixed], else: [mixed], haystack: 'NULL', needle: [mixed])}

Ich weiß nicht, ob ich dich richtig verstehe,
aber damit Fluid mit v:condition.string.contains etwas anfangen kann,
muß unter TYPO3 die vhs Extension installiert sein,
und du mußt es dem Fluid-Template per Anweisung
{namespace v=FluidTYPO3\Vhs\ViewHelpers}
bekannt machen.
Dann sollte die Condition wie gewünscht funktionieren.

Und es ist vielleicht sinvoller, diesen Viewhelper zu nutzen,
um abhängig von der Dateierweiterung etwas zu entscheiden,
dafrü sollten sich im Netz ja genügend RegExp's finden lassen.

poedder ·

Ah super, die Extension ist installiert, namespace gesetzt....
Der Code wird jedoch weiterhin direkt ins DOM geschrieben, anstelle interpretiert.

Da scheine ich noch mehr Recherche betreiben zu müssen.

Folgende Namespaces werden im Fluid-Template verwendet:
{namespace ffportfolio=Tx_FfPortfolio_ViewHelpers}
{namespace v=FluidTYPO3\Vhs\ViewHelpers}

Laut Doku muss nix weiter getan werden...

Nutze ich ffportfolio in dem Fluid-Template wird dies korrekt genutzt, eine Fehlermeldung bezüglich des Namespaces gibt es nicht.

🙁

Hast Du noch einen Tipp für mich?

poedder ·

Hej,
ich werd weiterhin nicht schlau aus dem VHS-Modul. Laut Dokumentation gibt es eine Helperfunktion
condition.string.contains , lade ich mir vhs aus dem typo3repo ist diese dort nicht vorhanden.
Es gibt dort unter if.condition.string.contains eine ViewHelper Klasse, die eventuell in betracht kommen kann.

Egal wie ich jedoch den Namespace verwende, hier gibt es ja mehrere Hinweise im Netz:
{namespace v=Tx_Vhs_ViewHelpers}
{namespace v=FluidTYPO3\Vhs\ViewHelpers}

etc.

Es wird immer eine Exception geworfen, Could not analyse class.

Bedeutet aus meiner Sicht, dass der Namespace nicht korrekt ist, bzw. in dem gesetzten Namespace die Klasse nicht auffindbar ist.

ich hab mal einen Screenschot aus dem Ordner typo3conf/ext beigefügt.

Wer hat denn mit der vhs extension bisher gearbeitet und kann mir einen Tipp geben?

Bildschirmfoto-2014-11-09-um-17.53.09.png