ViewHelper
Mit reinem HTML wird wiederkehrender Quellcode sehr schnell sehr unübersichtlich. Im Hinblick auf TYPO3, wo Seiten verschoben und umbenannt werden können, müssten Links und URLs im HTML Quelltext immer wieder erneut angepasst werden. Abhilfe schaffen hier besondere HTML-Tags, die von Fluid, dem Core und anderen Extensions mitgeliefert werden. Mit diesen sogenannten “ViewHelper” können direkt im HTML Quelltext Schleifen, Verlinkungen zu TYPO3 Seiten, Abfragen und das Ausliefern von per TypoScript generiertem Inhalt realisiert werden. Dank “Layouts”, “Partials” und “Templates” können die Fluid-Templates sehr gut strukturiert werden.
Hinweis
Im Folgenden eine Auflistung der zur Verfügung stehenden ViewHelper.
f:alias
TYPO3 4.3 typo3fluid/fluid 1.0.6
Mit diesem ViewHelper könnt ihr eigene Variablen innerhalb des öffnenden und schließenden Tags zur Verfügung stellen. Das ist sinnvoll, wenn ihr einen bestimmten Wert z.B. aus Objekten oder eine etwas längere ViewHelper Aneinanderreihung in eurem Template mehrfach wieder verwenden wollt.
Persönliche Anmerkung
Durch den eingeschränkten Gültigkeitsbereich und die Bereitstellung von mehreren Variablen als Array-Struktur mit teilweise weiter verschachtelten Fluid ViewHelper wird das Nachvollziehen der Programmierung erheblich erschwert. Ich rate dringen auf f:variable umzusteigen.
Parameter
| Parameter | Erklärung |
|---|---|
| map | Die Eingabe erfolgt in Array-Notation. Der Key gibt den Namen der neuen Variable wieder, während der Wert den Inhalt wieder spiegelt. |
Beispiel: Einfacher Text
Beispiel: Verschachtelte Arrays
Dieses Beispiel ist vielleicht wenig sinnvoll, aber es zeigt sehr gut, wie man innerhalb von Fluid mehrdimensionale Arrays erstellen kann.
Beispiel: Nutzung von Objekteigenschaften
Dieses Beispiel funktioniert nur, wenn ihr das feUser Objekt in eurer Extension per $this->view->assign() verfügbar gemacht habt.
f:base
TYPO3 4.3 TYPO3 11.3 TYPO3 12.0
Erstellt den base Tag. Mit diesem HTML Tag wird ein Pfad angegeben, der die Grundlage aller anderen Pfade wie Links und Bilder vorgibt. Diesen Basispfad holt sich der ViewHelper vorzugweise aus der Site-Konfiguration. In älteren TYPO3 Versionen wurden die TypoScript Eigenschaften config.baseURL und config.absRefPrefix dafür ausgelesen.
Information
Da der <base> Tag in den <head> Bereich einer Webseite gehört, macht die Verwendung diesen ViewHelpers nur dann Sinn, wenn ihr eure komplette Webseite mithilfe von Fluid aufbaut. Definiert ihr die Angaben für den <head> Bereich über TypoScript und dem Site-Modul, würde diese ViewHelper evtl. im <body> Tag landen, wo er nicht hingehört.
Die Ausgabe im Quelltext:
f:case
TYPO3 6.2 typo3fluid/fluid 1.0.6
Parameter
| Parameter | Erklärung |
|---|---|
| value | Der Inhalt des ViewHelpers wird nur dann angezeigt, wenn der Wert von value dem expression Parameter aus dem f:switch ViewHelper übereinstimmt |
| default | TYPO3 8.0.0 Veraltet, bitte verwendet f:defaultCase |
Ein Beispiel findet ihr beim f:switch ViewHelper
f:cObject
TYPO3 4.3Dieser ViewHelper nutzt den angegeben typoscriptObjectPath, um das dahinterliegende TypoScript auszuführen und das Resultat im Template auszugeben.
Parameter
| Parameter | Erklärung | Pflichtfeld |
|---|---|---|
| typoscriptObjectPath | Gebt hier den TypoScript Objektpfad an wie z.B. lib.beispieldaten.10 | Ja |
| data | Übergebt dem TypoScript Daten in Form eines Arrays, Objektes oder auch einen Text, auf dessen Basis das TypoScript Rendering vonstatten gehen soll. Im Falle von Array oder Objekt könnt ihr mit der TypoScript Eigenschaft field auf individuelle Daten zugreifen. Im Falle von Text verwendet bitte current. | |
| currentValueKey | Angabe eines Array Keys oder Objekt Eigenschaft, die innerhalb von TypoScript über current zur Verfügung gestellt werden soll. |
Beispiel mit Array
Sofern mittels assign zur Verfügung gestellt, wird der aktuelle tt_content Datensatz als Array dem TypoScript unter lib.content zur weiteren Verarbeitung durchgereicht. Mittels field kann das TypoScript auf alle Eigenschaften des tt_content Datensatzes zugreifen. Über current kann das TypoScript auf die Überschrift des tt_content Datensatzen direkt zugreifen.
Beispiel mit Text
Wenn statt Array oder Objekt nur Text übergeben wird, dann wird dieser Text automatisch dem TypoScript über current zur Verfügung gestellt.
f:comment
TYPO3 4.6 typo3fluid/fluid 1.0.6
Während HTML Kommentare auch im Quellcode ausgegeben werden, können mit f:comment ganze Bereiche vom Quellcode ausgeschlossen werden. Diese kommen somit im HTML Quellcode nicht mehr vor und die enthaltenen ViewHelper werden auch nicht ausgeführt. Sehr nützlich im Rahmen von Debugging.
Beispiel
Alles zwischen den f:comment Tags wird nicht ausgegeben und enthaltene ViewHelper nicht verarbeitet.
f:count
TYPO3 4.3 typo3fluid/fluid 1.0.6
Dieser ViewHelper zählt die Elemente im übergebenen Array oder die enthaltenen Objekte eines zählbaren Objektes wie \SplObjectStorage oder dem Extbase ObjectStorage.
Parameter
| Parameter | Erklärung |
|---|---|
| subject | Gebt hier das Array oder das Objekt an, dessen Elemente gezählt werden sollen. Wenn dieser Wert leer gelassen wird, versucht f:count das Array oder Objekt zwischen dem öffnenden und schließendem Tag zu zählen |
Beispiel mit subject
Beispiel mit Inhalt
Beispiel Inlinenotation
Beispiel mit renderChildren
f:cycle
TYPO3 4.3 typo3fluid/fluid 1.0.6
f:cycle wird im Rahmen von Schleifen wie f:for verwendet, um für jedes xte Element in der Schleife eine Sonderbehandlung durchführen zu können. Gerade odd und even Operationen, um abwechselnde Hintergrundfarben in Tabellen zu erzeugen sinnvoll.
Parameter
| Parameter | Erklärung |
|---|---|
| values | Ein Array mit Werten für jeden xten Durchlauf. |
| as | Variablenname, mit der Wert aus values, der nur zwischen öffnendem und schließendem f:cycle Tag Gültigkeit hat. |
Beispiel
f:for durchläuft alle 5 Mitarbeiter. f:cycle spring mit jedem Durchlauf von f:for ein Element aus values weiter. Somit bekommt der erste Mitarbeiter einen grünen, der zweiter Mitarbeiter einen roten und der dritte Mitarbeiter einen blauen Hintergrund. Ab dem vierten Mitarbeiter geht es wieder mit einem grünen Hintergrund weiter.
f:debug
TYPO3 4.3 typo3fluid/fluid 1.0.6
Zeigt den Inhalt einer Variable oben am Rand des Browsers an. Verschachtelte Elemente können mittels dem + Icon weiter aufgeklappt werden.
Parameter
| Parameter | Erklärung |
|---|---|
| title | Gibt der Debug-Ausgabe einen Titel. Bei mehreren Debug-Ausgaben können so die jeweiligen Ausgaben besser differenziert werden. |
| maxDepth | TYPO3 4.7 Durch die teilweise sehr tiefe Verschachtelung von Objekten kann die Debug-Ausgabe sehr groß werden. Mit maxDepth kann die Ausgabe nach Erreichen der angegebenen Tiefe unterbunden werden. |
| plainText | TYPO3 4.7 Anstatt einer HTML/JavaScript Ausgabe könnt ihr die Ausgabe auch komplett als reinen Text ausgeben lassen. |
| ansiColors | TYPO3 4.7 Wenn plainText aktiv ist, könnt ihr mit ansiColors die Textausgabe mit etwas Farbe aufhübschen |
| inline | TYPO3 4.7 Üblicherweise wird die Debug-Ausgabe oben am Rand des Browsers ausgegeben. Durch Aktivierung von inline wird die Ausgabe dort platziert, wo sich der f:debug ViewHelper im HTML befindet. |
| blacklistedClassNames | TYPO3 4.7 Einige Klassen werden bei der Debug-Ausgabe sehr groß. So z.B. der ObjectManager. Gebt deren Klassennamen als Array an, um deren Ausgabe zu verhindern |
| blacklistedPropertyNames | TYPO3 4.7 Ähnlich wie blacklistedClassNames, nur mit dem Unterschied, dass hiermit bestimmte Eigenschaften von der Debug-Ausgabe ausgeschlossen werden. |
Beispiel
f:defaultCase
TYPO3 8.0.0 typo3fluid/fluid 1.0.6
Der Inhalt dieses ViewHelpers wird angezeigt, wenn kein value anderer f:case ViewHelper mit dem expression Parameter des f:switch ViewHelpers übereinstimmt.
Beispiele zu diesem ViewHelper findet ihr unter f:switch.
f:else
TYPO3 4.3 typo3fluid/fluid 1.0.6
Diesen ViewHelper erkläre ich im ViewHelper f:if, da er nur dort verwendet werden kann.
Parameter
| Parameter | Erklärung |
|---|---|
| if | TYPO3 8.0 Durch das neue if Attribut können nun mehrfache else-if Abfragen realisiert werden |
f:escape
TYPO3 4.4 TYPO3 4.6 TYPO3 6.0
Dieser ViewHelper konnte Werte je nach Typ (html, entities oder url) escapen. Zur besseren Wartbarkeit wurde seine Funktionsweise in individuelle ViewHelper, zu finden im Unterordner format, aufgeteilt.
Diesen ViewHelper gibt es nicht mehr. Bitte verwendet einen der f:format.* ViewHelper.
f:flashMessages
TYPO3 4.4Dieser ViewHelper macht nur im Bereich selbstprogrammierter Extensions Sinn. Denn nur hier können Fehler auftauchen, die dem Webseitenbesucher mitgeteilt werden müssen. Hat der User z.B. bei einem Loginformular seinen Usernamen vergessen anzugeben und die dafür zuständige Action-Methode wurde so programmiert, dass der Username eine Pflichtangabe ist, dann wird dies dem Validator gemeldet, der daraufhin eine errorAction-Methode aufruft, die dann wiederum Fehlermeldungen zuerst sammelt und dann als “Bündel” an der Stelle ausgibt, an der ihr diesen ViewHelper platziert habt.
Parameter
| Parameter | Erklärung |
|---|---|
| renderMode | TYPO3 4.4 TYPO3 7.3 TYPO3 8.0 Sollen die Fehlermeldungen als Liste ul oder als Container div gerendert werden. |
| as | TYPO3 7.3 Die Angabe aus as wird zum Erstellen einer Variable für das Fluid-Template genutzt, die alle Benachrichtigungen beinhaltet. Um das Rendering dieser Nachrichten muss sich selbst gekümmert werden. |
| queueIdentifier | TYPO3 7.6 Alle Benachrichtigungen einer Extension landen normalerweise in einer Warteschlange mit dem Namen extbase.flashmessages.[extension]_[plugin]. Da ihr aber auch eigene Namen vergeben könnt, war es bisher nicht möglich diese im Frontend rendern zu lassen. Dieser Parameter schafft Abhilfe. |
Information
Seit TYPO3 8.6 gibt es den FlashMessageRenderResolver. Immer dann, wenn das as Attribut nicht angegeben wurde, springt der Resolver ein und rendert die Benachrichtigungen je nach Kontext. Im TYPO3 Backend findet also eine andere Ausgabe statt als im Frontend und nochmals anders, wenn die Ausgabe im CLI erfolgt.
Beispiel: Resolver
Hier spring der FlashMessageRenderResolver ein und rendert im Frontend Kontext eine Liste auf Basis von div Tags.
Beispiel: Eigenes Rendering
f:for
TYPO3 4.3 typo3fluid/fluid 1.0.6
Erzeugt eine Schleife. Jedes Element des übergebenen Arrays oder ObjectStorages wird durchlaufen und kann als Datenbasis des zugrunde liegenden Templates verwendet werden.
Parameter
| Parameter | Erklärung |
|---|---|
| each | Array oder Objekt, das durchlaufen werden soll |
| as | Ein Variablenname, der Daten des aktuellen Durchlaufs enthält |
| key | Falls ihr den Key/Schlüssel des aktuellen Durchlaufes benötigt, könnt ihr hiermit den Namen einer weiteren Variable definieren |
| reverse | Der Durchlauf des Arrays oder Objektes geschieht rückwärts |
| iteration | Eine Arrayvariable, die Informationen darüber beinhaltet, ob man sich im ersten oder letzten Durchlauf befindet. Außerdem enthalten: index, cycle, total, isEven, isOdd |
Beispiel
Ich weise der Variable mitarbeiter 6 Einträge zu, die dann eins nach dem Anderen von f:for durchlaufen werden. Mit jedem Durchlauf wird eine weitere Tabellenzeile erstellt.
Beispiel für rückwärts
Beispiel mit Array-Key
Ich weiß, das ist jetzt nicht das beste Beispiel, aber ihr seht, wie ich mithilfe des key Attributes auf die Array-Keys der jeweiligen Einträge zugreifen kann.
Beispiel mit Durchlaufinformationen
iterator.cycle ist genau wie iterator.index einfach nur ein Zähler und hat nichts mit dem ViewHelper f:cycle zu tun. Dieses Beispiel zeigt die Verwendung aller Durchlaufinformationen. Auch wenn ihr den f:if ViewHelper noch nicht kennengelernt haben solltet, so sollte dieses Beispiel selbsterklärend sein.
f:form
TYPO3 4.3Dieser ViewHelper ist für die Erstellung von HTML Formularen zuständig und bildet die zentrale Schnittstelle für alle anderen f:form.* ViewHelper.
Globale Tag Attribute
| Eigenschaft | Datentyp | Erklärung |
|---|---|---|
| additionalAttributes | array | Zusätzliche Tag Attribute. Diese werden dem Element direkt hinzugefügt. Beispiel: {foo: 'bar'} oder auch {onchange: 'alert("Hallo")'} |
| data | array | Hinzufügen von data Attributen. Diese Attribute werden dem Element mit vorangestelltem data- hinzugefügt. Beispiel: {brand: 'Volkswagen'} resultiert im Element zu: <input type="text" data-brand="Volkswagen">. |
| aria | array | Hinzufügen von aria Attributen. Diese Attribute werden dem Element mit vorangestelltem aria- hinzugefügt. Beispiel: {hidden: 'true'} resultiert im Element zu: <input type="text" aria-hidden="true">. |
Universelle Tag Attribute
| Eigenschaft | Datentyp | Erklärung |
|---|---|---|
| class | string | CSS Klasse oder auch Klassen, die diesem Element hinzugefügt werden sollen. |
| dir | string | Die Richtungsangabe für den enthaltenen Text. Erlaubte Werte sind ltr (left to right), rtl (right to left). |
| id | string | Ein Wert, der dieses Element auf der Seite eindeutig identifiziert. |
| lang | string | Angabe der enthaltenen Sprache diesen Elementes. Verwende die Kurzformen, wie im RFC 1766 beschrieben. Beispiel de, en oder auch en_US. |
| style | string | Angabe individueller CSS Stile für dieses Element. |
| title | string | Angabe eines kurzen Titels für dieses Element. Wird beim Drüberfahren mit der Maus nach wenigen Sekunden angezeigt. |
| accesskey | string | Tastenkürzel, um dieses Element mittels Tastatur direkt anzuspringen. |
| tabindex | integer | Angabe einer Ordnungszahl, in welcher Reihenfolge dieses Element mittels <Tab> zu erreichen ist. |
| onclick | string | Angabe von JavaScript, dass bei Klick auf dieses Element auszuführen ist. |
Parameter
| Parameter | Erklärung |
|---|---|
| action | Welche Actionmethode soll aufgerufen werden, wenn das Formular abgesendet wird |
| arguments | Welche zusätzlichen Variablen sollen beim Absenden mit übergeben werden |
| controller | Falls sich die gewünschte Actionmethode nicht im gleichen Controller befindet, muss hier dieser entsprechende Controller angegeben werden |
| extensionName | Falls das Formular von einer anderen Extension abgearbeitet werden soll, dann muss hier der Extensionname ohne tx_ und ohne Unterstriche angegeben werden |
| pluginName | Falls das Formular von einem anderen Plugin abgearbeitet werden soll, dann muss hier der Pluginname angegeben werden |
| pageUid | Seiten-UID eintragen, wenn das Formular von einer anderen Seite aus abgearbeitet werden soll |
| object | Übergebt hier ein Objekt mit Eigenschaften, die die Eingabefelder im Formular wiederspiegeln. |
| pageType | Gebt hier eine Seitentyp ID an, die das Formular abarbeiten soll. Könnte für AJAX interessant sein. |
| noCache | Kann aktiviert werden, um das Caching für die Zielseite zu deaktivieren. |
| noCacheHash | Nach Aktivierung wird dem generierten Link zur Zielseite kein cHash-Parameter angehangen |
| section | Definition eines Ankers zu dem auf der Zielseite gesprungen werden soll. Interessant wir Seiten auf denen viele Inhalte sind. |
| format | Gibt an um welches Format es sich bei der Zielseite handelt. Alternativ ginge auch xml, obwohl das bei einer Formularzielseite wenig Sinn machen würde. Klappt nur wenn actionUri nicht gesetzt ist. |
| additionalParams | Fügt weitere Variablen der Zielseite an. Im Gegensatz zu arguments, können hiermit Variablen hinzugefügt werden die nicht mit dem Extensionnamen geprefixed werden. Klappt nur, wenn actionUri nicht gesetzt ist. |
| absolute | Nach Aktivierung wird der Zeilseite noch der Domainname und Pfad vorangestellt. Klappt nur, wenn actionUri nicht gesetzt ist. |
| addQueryString | Falls dem Formular bereits Parameter über die URL mitgegeben wurden, könnt ihr hier entscheiden, ob diese Parameter auch mit auf die Zielseite übergeben werden. Klappt nur, wenn actionUri nicht gesetzt ist. |
| argumentsToBeExcludedFromQueryString | Falls ihr addQueryString aktiviert habt, aber einen oder zwei bestimmte Parameter wieder entfernen wollt, dann tragt ihr hier diese Parameter ein. Klappt nur, wenn actionUri nicht gesetzt ist. |
| addQueryStringMethod | TYPO3 7.6 Normalerweise werden nur die GET Parameter bei Verwendung von addQueryString an die Zielseite angehangen. Dieser Parameter erlaubt 4 Werte. GET: Standard. Die GET-Parameter werden übergeben. POST: Die POST Parameter werden mit übergeben. GET,POST: GET-Parameter sind die Basis und werden mit POST Parametern überschrieben, sofern beide Methoden gleichnamige Parameter beinhalten. POST,GET: POST-Parameter werden mit GET-Parametern überschrieben. |
| fieldNamePrefix | Falls ein anderer Prefix gewünscht ist. Macht eigentlich nur Sinn, wenn die Formulardaten von einer anderen Extension abgearbeitet werden müssen. |
| actionUri | Gebt hier Eure ganz eigene individuelle Zielseiten-URL ein. Viele der oberen Parameter haben aber dann keine Wirkung mehr. |
| objectName | Hier kommt ein Objekt- bzw. Modelname rein, in das die nach Absenden gesammelten Formulardaten gespeichert werden sollen. Hat den Vorteil, dass Ihr nicht in jeder Action die Formulardaten überprüfen, sondern die Überprüfung nur einmalig im Model vornehmen müsst. |
| hiddenFieldClassName | TYPO3 4.7 Der f:form ViewHelper rendert ein paar hidden Felder, um z.B. eine Liste über die erlaubten Formularfelder zu generieren oder auch die Action zu kennen, die dieses Formular rendern lässt. Mit diesem Parameter könnt Ihr dem div-Tag, der diese hidden Felder enthält explizit setzen. |
Beispiel
Fluid Template:
HTML Ausgabe:
Hier seht Ihr das Thema Sicherheit. Fluid baut automatisch einen versteckten Bereich mit ein paar Werten in Euer Formular ein. Unteranderem befindet sich dort ein __hmac-Wert. Innerhalb dieses Wertes sind alle erlaubten Formularfelder nochmals enthalten. Wenn also über bestimmte Webseitenattacken Felder entfernt oder hinzugefügt werden, dann kann Extbase später feststellen, dass die Anzahl und/oder Feldnamen nicht übereinstimmen und wirft eine Fehlermeldung. Das Formular kann also nicht abgesendet werden.
Ich habe in meinem Beispiel noch einen Objektnamen angegeben newFeUser. Wie ihr seht, wurde dieser Wert jedem Feld in meinem Formular vorangestellt. Das hat den Vorteil, dass meine Formularfelder nicht einzeln, sondern gebündelt in einem Array an die Zielseite übertragen werden. Dort angekommen kann ich meiner Action mitteilen, dass der Inhalt diesen Arrays in ein Modell überführt werden soll. Bei dieser Überführung werden auch automatisch die enthaltenen Werte auf Gültigkeit überprüft, sofern ihr überhaupt Überprüfungsregeln in euren Modellen angegeben habt. Nur wenn alle Überprüfungen gültig waren, kann das Modell mit den Formulardaten an die Action übergeben werden und dort mit einem Einzeiler in der Datenbank gespeichert werden.
f:groupedFor
TYPO3 4.3 typo3fluid/fluid 1.0.6
Ein sehr mächtiger ViewHelper im Bereich der Listengenerierung. Übergebt dem ViewHelper ein Array und ein Gruppierungskriterium und ihr erhaltet mit jedem Durchlauf bzw. mit jeder gefundenen Gruppe ein Array mit den dazugehörigen Arrayelementen zurück. Zu kompliziert? Na dann schaut mal in die Beispiele.
Parameter
| Parameter | Erklärung |
|---|---|
| each | Array oder Objekt, das durchlaufen werden soll |
| as | Ein Variablenname, der die gruppierten Datensätze enthält |
| groupBy | anhand welcher Eigenschaft soll das Array gruppiert werden |
| groupKey | Innerhalb der f:groupedBy Tags kann mit dieser Variable auf den gruppierten Wert zugegriffen werden. |
Beispiel
Ich hab hier wieder das Beispiel mit den 6 Mitarbeitern ausgepackt. Wie Ihr sehen könnt habe ich dem f:groupedBy ViewHelper gesagt, dass er diese Mitarbeiter anhand ihrer Städte gruppieren soll (groupBy). Das geübte Auge sieht evtl. sofort, dass die ersten beiden Arrayeinträge in Lindlar wohnen. Um innerhalb der f:groupedBy Tags auf diesen Städtenamen zugreifen zu können, verwende ich den Parameter groupKey. Der Wert aus groupBy und groupKey müssen nicht übereinstimmen. Innerhalb von groupKey hätte ich auch einfach city nehmen können.
Über die Variable, die ich unter “as” angegeben habe kann ich nun auf die Elemente der ersten gefundenen Gruppe zugreifen und mit f:for durchlaufen lassen.
f:if
TYPO3 4.3 typo3fluid/fluid 1.0.6
Ermöglicht Wenn-Dann-Sonst-Abfragen.
Parameter
| Parameter | Erklärung |
|---|---|
| condition | Hier kommt die Vergleichsabfrage rein (Siehe Beispiele) |
Folgende Vergleiche sind erlaubt: ==, !=, <, <=, >, >= und %.
Ab TYPO3 8.0 können auch komplexere Operatoren wie && und || inkl. Gruppierungen mittels Klammern verwendet werden.
Verglichen werden können nur Variablen folgenden Typs: Zahlen, Objekteigenschaften, Arrays und Ergebnisse aus ViewHelpern.
Einfache Beispiele
Wenn kein f:then oder f:else ViewHelper gefunden wurde, dann wird der Inhalt zwischen den f:if ViewHelpern immer nur dann ausgegeben, wenn die Bedingung wahr ist. Wenn komplette WENN->DANN->SONST-Konstrukte erzeugt werden müssen, dann müssen auch immer die f:then und f:else ViewHelper verwendet werden.
f:image
TYPO3 4.3Ich war total begeistert, als ich von diesem ViewHelper das erstmal gelesen habe. Die Arbeit, die man sich normalerweise umständlich in einer Extension oder im TS machen musste gibt es nun fertig als ViewHelper und die Bilder werden nicht einfach nur verkleinert dargestellt. Nein! Sie werden mithilfe von PHP-GD und imagemagick auf die hier angegebene Größe verkleinert. Eine geniale Erfindung, die ich nicht mehr missen möchte.
Parameter
| Parameter | Erklärung |
|---|---|
| src | - Pfad zu der Datei. Prefix EXT: möglich.- Kombinierter Identifier wie 2:uploads/tx_news/hund.png. Wobei die Zahl die UID des Storages angibt.- UID aus der Tabelle sys_file - Wenn treatIdAsReference aktiviert wurde, dann gilt nicht mehr die UID aus der Tabelle sys_file, sondern die UID aus der Tabelle sys_file_reference. |
| alt | Alternativtext für das Bild, falls es nicht angezeigt wird |
| width | Breite des Bildes. Hier kann z.B. mit einem angehängtem c gesagt werden, dass das Bild, falls die Proportionen nicht genau passen, abgeschnitten wird. Z.B. 200c |
| height | Höhe des Bildes. Hier kann z.B. mit einem angehängtem c gesagt werden, dass das Bild, falls die Proportionen nicht genau passen, abgeschnitten wird. Z.B. 100c |
| minWidth | Auch wenn die Bilder im Original evtl. kleiner sind wie dieser Wert hier, so werden diese Bilder auf die hier angegebene Breite gezoomt. |
| minHeight | Auch wenn die Bilder im Original evtl. kleiner sind wie dieser Wert hier, so werden diese Bilder auf die hier angegebene Höhe gezoomt. |
| maxWidth | Auch wenn die Bilder im Original evtl. größer sind wie dieser Wert hier, so werden diese Bilder auf die hier angegebene Breite verkleinert. |
| maxHeight | Auch wenn die Bilder im Original evtl. größer sind wie dieser Wert hier, so werden diese Bilder auf die hier angegebene Höhe verkleinert. |
| treatIdAsReference | TYPO3 6.0 Verwende die UID beim src Parameter für die Tabelle sys_file_reference und nicht mehr für Tabelle sys_file. |
| image | TYPO3 6.2 Anstatt dem src Parameter könnt ihr hier das komplette Bildobjekt von FAL übergeben (FileInterface/AbstractFileFolder). src und image sind eine entweder-oder-Sache. Ihr könnt nicht beide gleichzeitig verwenden. |
| crop | TYPO3 7.3 Hiermit könnt Ihr das in sys_file_reference hinterlegte Cropping überschreiben. Erwartet wird ein Text wie: X,Y,WIDTH,HEIGHT. X = Horizontale Anzahl Pixel von der oberen linken Ecke. Y = Vertikale Anzahl von Pixel der oberen linken Ecke. WIDTH/HEIGHT: Breite und Höhe des Ausschnitts in Pixel. Wenn 0, dann wird das in sys_file_reference hinterlegte Cropping komplett deaktiviert. |
| absolute | TYPO3 7.6 Wenn 1, dann wird das Bild mit einem absoluten Pfad gerendert. |
Beispiel in Originalgröße
Beispiel: Beibehaltung der Proportionen
Beispiel: Geschnittenes Bild
Die kürzere Seite wird auf 100 Pixel gesetzt und bei der längeren Seite wird nach 100 Pixeln einfach abgeschnitten.
f:layout
TYPO3 4.3 typo3fluid/fluid 1.0.6
Doku kommt noch
f:media
TYPO3 7.6Parameter
| Parameter | Erklärung |
|---|---|
| file | Hier geht es nicht um eine UID, Dateinamen oder Referenz. Diese Eigenschaft erwartet das komplette Bildobjekt vom Typ FileInterface oder AbstractFileFolder |
| additionalConfig | Eine zusätzliche Konfiguration, die an den Bildrenderer Prozess übergeben wird |
| width | Breite des Bildes. Hier kann z.B. mit einem angehängtem c gesagt werden, dass das Bild, falls die Proportionen nicht genau passen geschnitten wird. Z.B. 200c |
| height | Höhe des Bildes. Hier kann z.B. mit einem angehängtem c gesagt werden, dass das Bild, falls die Proportionen nicht genau passen geschnitten wird. Z.B. 100c |
f:or
TYPO3 8.0.0 typo3fluid/fluid 1.0.6
Doku kommt noch
f:render
TYPO3 4.3 typo3fluid/fluid 1.0.6
Die Partials sind in Fluid wie die FCEs in TemplaVoila. Kurz: Wiederverwendbare Templates. Eine geniale Sache, solange ihr diese ViewHelper in Maßen einsetzt, denn das Laden eines Partials dauert ca. 5 Millisekunden. Wenn ihr also irgendwann mal auf die Idee kommen solltet, jede Zelle einer Tabelle mit Partials generieren zu wollen, dann kann das Laden der Webseite bei 700 Tabellenzeilen und 15 Spalten schonmal etwas dauern: 700 Zeilen * 15 Spalten * 5 Millisekunden = 52500 Millisekunden. Plus die Zeit, die TYPO3 selbst noch braucht sind wir bei knapp einer Minute.
Die Dateien für Partials liegen immer in fest vorgegebenen Verzeichnissen. Innerhalb von Extensions ist dies: typo3conf/ext/[ExtensionKey]/Resources/Private/Partials/. Wenn Ihr allerdings mit FLUIDTEMPLATE arbeitet, dann gebt Euren gewünschten Verzeichnispfad mithilfe der TS-Eigenschaft partialRootPath mit abschließendem / an.
Sections haben kein eigenes Verzeichnis, da diese immer innerhalb der aktuellen Templatedatei definiert werden müssen. Ausnahmen machen da die Layouts.
Parameter
| Parameter | Erklärung |
|---|---|
| section | Der Name einer Section, die gerendert werden soll. |
| partial | Pfad + Dateiname ohne .html-Endung ab dem Verzeichnis, das für Partials definiert wurde. |
| arguments | Welche Variablen sollen in den Partial/das Layout übernommen werden. |
| optional | Normalerweise hagelt es Fehlermeldungen, wenn Sections nicht auffindbar sind. Setzt man diesen Parameter aber auf TRUE, dann wird eben nichts ausgegeben. |
Beispiel für Partial
In unserem Fluidtemplate:
In der Partial Datei TableRow.html
Weitere Beispiele folgen
f:renderChildren
TYPO3 4.5Dieser ViewHelper findet nur innerhalb der Templates von Fluid Widgets Gebrauch. Gerade beim f:widget.paginate ViewHelper wird f:renderChildren benötigt, um den Inhalt zwischen dem öffnenden und schließenden f:widget.pageinate Tags zu rendern.
Parameter
| Parameter | Erklärung |
|---|---|
| arguments | Variablen in ArrayNotation, die an das Unter-Template übergeben werden sollen |
f:renderFlashMessages
TYPO3 4.3 TYPO3 4.5 TYPO3 4.5
Veraltet. Bitte verwendet nun f:flashMessages.
f:section
TYPO3 4.3 typo3fluid/fluid 1.0.6
Sections arbeiten ähnlich wie Partials. Während Partials in eine eigene Datei ausgelagert werden und somit innerhalb der Extension von überall aufgerufen werden können, befinden sich Sections innerhalb der Templatedateien und können auch nur von dort und Layouts aufgerufen werden. Mit Hilfe von Sections lassen sich gerade große Templates hervorragend strukturieren.
Parameter
| Parameter | Erklärung |
|---|---|
| name | Ein Name unter dem man den Inhalt zwischen den Tags wieder auffinden kann |
Beispiel
f:spaceless
TYPO3 7.6.0 typo3fluid/fluid 1.0.6
Jedes Enter, jede Einrückung und jedes Leerzeichen in euren Fluid-Templates werden 1 zu 1 im Seiten-Quelltext eurer Webseite ausgegeben. Zwar reduziert der Browser überflüssigen Leerraum bei der Ausgabe auf ein Leerzeichen zusammen, aber trotzdem muss jedes Leerzeichen zum Browser übertragen werden und kostet somit zusätzlichen Traffic. Mit diesem ViewHelper können die überflüssigen Leerräume schon vor der Ausgabe entfernt werden.
Im folgenden Beispiel würde der HTML-Quelltext als eine lange Zeile zum Browser übertragen werden.
Es wird nur Leerraum zwischen den HTML-Tags entfernt. Nicht jedoch der Leerraum im Fließtext.
Beispiel
f:switch
TYPO3 6.2 typo3fluid/fluid 1.0.6
Mit dem f:switch ViewHelper könnt Ihr gleich mehrere Varianten eines Wertes überprüfen. Auf die Frage “Was bist Du?” könnte die Antwort Vater, Mutter, Tochter oder Sohn erfolgen. Diese 4 Antwortmöglichkeiten mittels dem f:if ViewHelper zu realisieren wäre schon sehr komplex und schwer zu warten. Mit jeder weiteren Variante würde der Quelltext ein bisschen weiter nach rechts rutschen. Nach ein paar Monaten weiß kein Mensch mehr, was da eigentlich gerade passiert.
Parameter
| Parameter | Erklärung |
|---|---|
| expression | Ein string/int/bool Wert, auf den die enthaltenen f:case ViewHelper reagieren sollen. |
Beispiel
f:then
TYPO3 4.3 typo3fluid/fluid 1.0.6
Da dieser ViewHelper nur innerhalb des f:if ViewHelpers verwendet werden kann, erkläre ich diesen dort.
f:translate
TYPO3 4.3Der f:translate ViewHelper stellt Übersetzungen im Fluid-Template zur Verfügung. Ohne Angabe eines Pfades werden Übersetzungen aus der locallang.xlf der aktuellen Extension bezogen.
Parameter
| Parameter | Erklärung |
|---|---|
| key | In den Sprachdateien (*.locallang.xlf) wird jeder Eintrag eindeutig über die index Angabe identifiziert. Gebt für key diesen Index an, um den gewünschten Eintrag in der vorgegebenen Übersetzung auszulesen. Wünscht ihr Zugriff auf die Sprachdateien anderer Extensions, dann verwendet zusätzlich die Option extensionName. Sollten die Sprachdateien anders heißen, dann muss der vollständige Pfad zu der Sprachdatei in Standardsprache (die Dateien ohne de. vorne dran) mit vorangestelltem LLL:EXT: und der key mittels : vom Pfad getrennt angegeben werden |
| id | TYPO3 6.0 Das gleiche wie key. Wurde damals zwecks besserer Kompatibilität zu TYPO3 Flow hinzugefügt und danach aus Kompatibilitätsgründen zu früheren TYPO3 Versionen nie wieder entfernt. |
| default | Wenn der key in der Sprachdatei nicht gefunden werden kann, dann wird der Text aus default für die Ausgabe verwendet. Wenn default nicht verwendet wird, versucht dieser ViewHelper den Default aus dem Text zwischen öffnendem und schließendem Tag zu verwenden. |
| htmlEscape | Alle Übersetzungen aus den Sprachdateien werden zunächst durch PHP:htmlspecialchars() verarbeitet. Falls Übersetzungen HTML Tags beinhalten, dann setzt htmlEscape auf false, um die Verarbeitung durch htmlspecialchars zu unterbinden.htmlEscape wirkt sich nicht auf den Text aus default aus. |
| arguments | In den Übersetzungen können Platzhalter definiert werden, die dann mit den Inhalten diesen Arrays befüllt werden. |
| extensionName | TYPO3 6.0 Wenn angegeben, dann wird die locallang.xlf aus Resources/Private/Language verwendet, um eine Übersetzung für key zu finden. Ohne Angabe wird der aktuelle Kontext, in dem sich das Fluid-Template befindet, ausgelesen und von dort der aktuelle Extension-Name extrahiert. Bitte verwendet UpperCamelCase: BlogExample statt blog_example |
Beispiel: Simpel
Beispiel: Vollständiger Pfad
Beispiel: Platzhalter
Mit %s wird auf den ersten Wert des übergebenen Arrays zugegriffen. Kommt %s nochmals vor, dann wird auf den zweiten Array-Eintrag zugegriffen. Um das unabhängig von der Reihenfolge zu machen, empfehle ich noch folgende Notation:
Mit %1 greift ihr auf den ersten Eintrag zu und sagt diesem, dass er als String $s interpretiert werden soll. Weitere Informationen zu dieser Syntax findet ihr in der Dokumentation der zugrundeliegenden PHP Funktion vsprintf.
f:variable
TYPO3 8.4 typo3fluid/fluid 2.2.0
Erstellt im Template eine Variable, die ab Verwendung bis Dateiende Gültigkeit hat. Sehr sinnvoll, um das Ergebnis eines ViewHelpers noch vor einer Schleife in eine Variable zu überführen, anstatt den ViewHelper innerhalb der Schleife 30 Mal aufrufen zu lassen.
Parameter
| Parameter | Erklärung |
|---|---|
| name | Der Variablenname. Beispiel: frucht. Mit dem hier angegebenen Namen kann im Template nach Nutzung dieses ViewHelpers mittels {frucht} auf den enthaltenen Wert zugegriffen werden. |
| value | Der Wert, der dem Variablennamen zuzuweisen ist. |
Beispiel: Einfache Wertzuweisung
Wenn der Parameter value nicht angegeben wird, wird automatisch der Inhalt zwischen öffnendem und schließenden Tag als value verwendet.
Beispiel: Performance
Hier ein Beispiel, wie man mit f:variable das immer wiederkehrende Aufrufen von ViewHelper in einer Schleife unterbinden kann. Je nach ViewHelper lässt sich so richtig Zeit während dem ersten Parsen der Templates einsparen.