f:format-ViewHelpers
f:format.crop
Parameter
- maxCharacters (Pflichtangabe): Anzahl Zeichen nach denen abgeschnitten werden soll.
- append (Standard: ...)
- respectWordBoundaries (Standard: aktiviert): Solange dieser Wert aktiviert ist und ein Schnitt innerhalb eines Wortes geschehen würde, wird dieser Schnitt VOR dem Wort ausgeführt, um das Wort nicht zu stückeln. Mit FALSE zwingt man den ViewHelper zum Trennen IM Wort.
- respectHtml (Standard: aktiviert): Normalerweise würden auch die Buchstaben/Zeichen von HTML-Tags gezählt
Beispiel
<f:format.crop maxCharacters="14">Diesen Text werden wir jetzt zerschnibbeln</f:format.crop>
Normalerweise würde dieser Befehl das Wort "werden" auftrennen. Aber dadurch dass "respectWordBoundaries" per default gesetzt ist erhalten wir diese Ausgabe:
Diesen Text...
Beispiel: Trennung im Wort
<f:format.crop maxCharacters="14" respectWordBoundaries="FALSE">Diesen Text werden wir jetzt zerschnibbeln</f:format.crop>
ergibt
Diesen Text we...
Beispiel mit respectHtml = FALSE
<f:format.crop maxCharacters="25" respectHtml="FALSE"><p>Diesen Text <strong>werden</strong> wir jetzt zerschnibbeln</p></f:format.crop>
ergibt
Diesen Text...
Wie oben schon erwähnt, liegt das daran, dass nun auch alle Buchstaben der HTML-Tags mitgezählt werden.
f:format.currency
Parameter
- currencySign: Das Währungskennzeichen wie $ oder €. Dieses Zeichen wird immer hinter der Währung angezeigt.
- decimalSeperator (Standard: ,): Welcher Zeichen soll für die Trennung von Euro und Cent verwendet werden. Dezimaltrenner.
- thousandsSeperator (Standard: .): Welches Zeichen soll als Tausendertrennzeichen verwendet werden.
Mit diesem ViewHelper könnt Ihr Zahlen als Währung darstellen lassen. Doch zwei wichtige Informationen:
Übergebt Ihr an diesen ViewHelper einen leeren Text, dann benötigt die in diesem ViewHelper befindliche Funktion number_format knapp 23 Millisekunden. Liefert Ihr dieser Funktion stattdessen direkt ein 0.00 ist die Funktion in 1-2 Millisekunden durch. Wichtig wenn Ihr mit langen Listen arbeitet.
Ihr dürft diesem ViewHelper keine Zahlen mit einem Komma als Dezimaltrenner mitgeben. Siehe Beispiel.
Beispiel
<f:format.currency currencySign="$" decimalSeparator="." thousandsSeparator=",">1122334455.66</f:format.currency>
ergibt: 1,122,334,455.66 $
Beispiel mit nicht float kompatiblen Zahlen
<f:format.currency currencySign="$" decimalSeparator="." thousandsSeparator=",">1122334455,66</f:format.currency>
ergibt: 1,122,334,455.00 $
f:format.date
Parameter
- date (Pflichtangabe): Entweder ein Objekt vom Typ DateTime oder eine Text/Datum, das in ein DateTime-Objekt konvertiert werden kann. Z.B. 17.01.1979 geht. 17.01.79 geht nicht.
- format (Standard: Y-m-d): Wie soll das Datum ausgegeben werden?
So schön wie das mit den ganzen DateTime-Objekten ist, prüft die Wert bitte ganz genau. Besucht Online-Timestamp-Konverter oder gleicht die Wert mit denen in Eurer Datenbank ab. So steht in der Doku z.B. Wenn Ihr einen Timestamp in ein DateTime-Objekt konvertieren wollt, dann fügt einfach ein @-Zeichen vorne an. Ich hoffe ich erzähl jetzt nichts Falsches, aber dieser Timestamp wird nach dem RFC2822 konvertiert und das ist Zeitzone 0. In Deutschland würden wir dem resultierenden DateTimewert also immer hinterherhinken. Die DateTime-Objekt sollten besser nach ISO8601 konvertiert werden. Dann klappts auch mit der richtigen Zeitzone. Ich für meinen Teil hab mir einen eigenen ViewHelper geschrieben der sich daran hält und auch Extbase arbeitet intern mit diesem ISO-Format. Siehe:
DataMapper->mapDateTime()
Zitat: return new DateTime(date('c', $timestamp));
Warum das in den ViewHelper noch nicht eingeflossen ist, kann ich mir nicht erklären.
Beispiel
<f:format.date date="17.01.1979" format="d/m/y" />
Beispiel Timestamp
<f:format.date format="d.m.Y">@1334439765</f:format.date>
Wie schon gesagt: Je nach Land/Kontinent bitte mit Vorsicht zu behandeln.
f:format.html
Parameter
- parseFuncTSPath (Standard: lib.parseFunc_RTE): Formatiere einen Text anhand der TS-Konfiguration, die sich hinter dem angegebenen TS-Objektpfad befindet
Wenn Ihr ein Modell für die Tabelle tt_content erstellt habt, dann erhaltet Ihr im Frontend die nackten Daten, wie sie aus der Datenbank kommen. Damit die Daten wieder so aussehen, wie wenn Ihr sie mit styles.content.get ausgebt, hilft Euch dieser ViewHelper weiter. Dieser schnappt sich das Durcheinander und schleift es einmal komplett durch den TS-Objektpfad lib.parseFunc_RTE. Danach sollten Eure Daten wieder wie frisch aufbereitet aussehen.
Beispiel
<f:format.html>{content.bodytext}</f:format.html>
Beispiel/Trick mit abgeschalteten htmlspecialchars
<f:format.html parseFuncTSPath="lib.parseFunc">{variable}</f:format.html>
f:format.htmlentitiesDecode
Parameter
- value: Der Text der dekodiert werden soll
- keepQuotes (Standard: deaktiviert): Sollen einfache und doppelte Anführungsstriche auch dekodiert werden?
- encoding (Standard: Wie im INSTALL_TOOL definiert. Normalerweise: UTF-8): Wir sind hier im Bereich TYPO3 und da sollte der Zeichensatz auf UTF-8 und nix anderes stehen. Sollte wiedererwartend ein anderer Zeichensatz gewünscht sein, kann dieser hier angegeben werden. Siehe auch Info auf php.net.
Beispiel
<p><f:format.htmlentitiesDecode>Müller & Breuer</f:format.htmlentitiesDecode>
Im Quelltext sieht man wieder ein richtig sauberes: "Müller & Breuer".
Parameter
- value: Der Text der kodiert werden soll
- keepQuotes (Standard: deaktiviert): Sollen einfache und doppelte Anführungsstriche auch dekodiert werden?
- encoding (Standard: Wie im INSTALL_TOOL definiert. Normalerweise: UTF-8): Wir sind hier im Bereich TYPO3 und da sollte der Zeichensatz auf UTF-8 und nix anderes stehen. Sollte wiedererwartend ein anderer Zeichensatz gewünscht sein, kann dieser hier angegeben werden. Siehe auch Info auf php.net.
Mit diesem ViewHelper wandelt Ihr Sonderzeichen oder auch die deutschen Umlaute in websichere HTML-Codes um. Ein ü wird dann zum Beispiel zu ü. Damit kann gewährleistet werden, dass jeder Browser dieses Zeichen richtig anzeigt und zwar egal wo auf der Welt. Seit der Standardzeichensatz von TYPO3 auf UTF-8 gesetzt ist, sollte diese Sache hier so nach und nach der Vergangenheit angehören.
Beispiel
<f:alias map="{name: 'Müller & Breuer'}">
<p><f:format.htmlentities>{name}</f:format.htmlentities></p>
</f:alias>
f:format.htmlspecialchars
Parameter
- value: Der Text der formatiert werden soll
- keepQuotes (Standard: deaktiviert): Sollen einfache und doppelte Anführungszeichen auch formatiert werden
- encoding:
- doubleEncode (Standard: aktiviert): Mit jedem Aufruf diesen ViewHelpers wird ein bereits htmlspecialchared Text immer und immer wieder gehtmlspecialchared. Auf & wird dann & dann &amp;, dann &amp;amp; und so weiter. Um das zu verhindert, kann dieser Parameter auf FALSE gesetzt werden.
Wenn Ihr mit Userdaten (Formulardaten) arbeitet, dann sollte dieser Inhalt zuallererst durch diesen ViewHelper. Denn dieser wandelt alle spitzen Klammern von HTML-Tags in ein nicht mehr interprtierbares Format um. Die HTML-Tags können also keinen Schaden mehr verursachen und werden iom FE angezeigt statt verarbeitet.
Beispiel
<f:format.htmlspecialchars><p><strong>fetter</strong> Text</p></f:format.htmlspecialchars>
f:format.nl2br
Dieser ViewHelper besitzt keine Parameter. Den umzuwandelnden Inhalt bezieht er sich aus dem Text zwischen den Tags. Sinnvoll wird dieser ViewHelper beim Anzeigen von Inhalten aus TEXTAREA-Tags. Denn hier wurden die Zeilenumbrüche mit ENTER (CHR(10)) realisiert. HTML sind diese Umbrüche aber völlig egal und würde den Text einfach hintereinander weg anzeigen. Um das zu verhindern könnt Ihr diesen ViewHelper verwender. Er konvertiert alle CHR(10)-Zeilenumbrüche in <br />-Tags und so werden Zeilenumbrüche auch im Browser wieder richtig dargestellt.
Beispiel
<f:format.nl2br>Text
mit
Zeilenumbrüchen</f:format.nl2br>
ergibt
Text<br />mit<br />Zeilenumbrüchen
f:format.number
Parameter
- decimals: Wie viele Nachkommastellen dürfen angezeigt werden.
- decimalSeperator (Standard: .): Welcher Zeichen soll für die Trennung von Euro und Cent verwendet werden. Dezimaltrenner.
- thousandsSeperator (Standard: ,): Welches Zeichen soll als Tausendertrennzeichen verwendet werden.
Mit diesem ViewHelper könnt Ihr Zahlen formatieren. Er arbeitet ähnlich dem f:format.currency-ViewHelper
Beispiel
<f:format.number decimals="3" decimalSeparator="." thousandsSeparator=",">1122334455.667788</f:format.number>
ergibt: 1,122,334,455.668. Wie Ihr seht wird sogar automatisch aufgerundet.
f:format.padding
Parameter
- padLength (Pflichtangabe): Wie viel Zeichen lang darf der Text inkl. der hinzugefügten Abstandszeichen maximal werden
- padString (Standard: Leerzeichen): Welches Zeichen soll als Abstand dienen
- padType (Standard: right): Wo sollen die Abstandszeichen eingefügt werden. Zur Auswahl steht right, left und both
Beispiel zur Funktionsweise
<p><f:format.padding padLength="10" padString="-=">TYPO3</f:format.padding>ist cool</p>
<p><f:format.padding padLength="10" padString="#">Stefan</f:format.padding>ist cool</p>
<p><f:format.padding padLength="10" padString=" ">Ich</f:format.padding>bin cool</p>
In diesem Beispiel wird das angegebene Zeichen oder die Zeichen solange wiederholt, bis das Maximum an Zeichen erfüllt ist. Je nach Zeichensatz macht diese Darstellung wenig Sinn. Denn wie Ihr seht beginnen die letzten beiden Wörter je Zeile immer an einer unterschiedlichen Stelle.
Beispiel mit sinnvoller Einrückung
<pre><f:format.padding padLength="10" padString=" ">TYPO3</f:format.padding>ist cool<br />
<f:format.padding padLength="10" padString=" ">Stefan</f:format.padding>ist cool<br />
<f:format.padding padLength="10" padString=" ">Ich</f:format.padding>bin cool</pre>
Hier nahezu das gleiche Beispiel wie oben. Allerdings fangen die letzten beiden Wörter je Zeile nun immer an der gleichen Position an. Mit Hilfe diesen ViewHelpers könnte man also so eine Art Tabulator erstellen.
f:format.printf
Parameter
- arguments (Pflichtangabe): Gib hier Werte in Arraynotation ein, die die Platzhalter in dem Text, der sich zwischen den Tags befindet, ersetzt.
Mit diesem ViewHelper können Platzhalter in einem Text mit den Werten auf dem Array ersetzt werden.
Beispiel
<f:format.printf arguments="{0: 'Stefan', 1: 2, 2: '4'}">%1$s hat eine %3$d-seitige Dokumentation geschrieben und %2$d Tage dafür gebraucht.</f:format.printf>
Mit %1, %2 und %3 wird der jeweilige Wert aus dem Array geholt. Da es unterschiedliche Datentypen gibt, müssen wir jedem Wert noch mitteilen, um was für einen Datentyp es sich handelt. Dabei steht $s für string also Text. $d für einen Zahlenwert, der auch ein Vorzeichen enthalten darf und wie Ihr evtl. schon gesehen habt, habe ich die Zahl 4 als Text deklariert, gebe sie aber als Typ Integer an den Text weiter. Weitere Infos auf php.net
Wenn dieser ViewHelper überhaupt nicht angezeigt wird, dann habt Ihr entweder einen Fehler in Eurem Array oder Ihr habe die Typdefinition der Variablen wie $s oder $d vergessen mit anzugeben.
f:format.raw
Parameter
- value: Der Text, der unangetastet/unverändert ausgegeben werden soll
Es gibt viele ViewHelper, die Inhalte vor der Ausgabe durch htmlspecialchars und anderen Methoden und Funktionen schleusen. Dies zu verhindern stellt auf jeden Fall ein Sicherheitsrisiko dar, kann aber mit diesem ViewHelper erreicht werden. Ich denke gerade im Bereich von Formulardaten kann dieser ViewHelper evtl. Verwendung finden.
Beispiel
<f:format.raw value="{formData.nachricht}" />
f:format.stripTags
Parameter
- value: Der Text aus dem die HTML-Tags entfernt werden sollen
Dieser ViewHelper entfernt sämtliche HTML-Tags aus einem Text.
Beispiel
<f:format.stripTags>Ein <strong>fetter</strong> Text mit einigen <span style="color: blue;">bunten</span> HTML-Tags.</f:format.stripTags>
f:format.urlencode
Parameter
- value: Der Text, der für die Übergabe per Link vorbereitet werden soll
In Texten und Firmennamen kommen immer wieder Sonderzeichen wie @ & oder % vor. Diese Zeichen sind nicht URL-sicher und sollten vor der Übermittlung durch diesen ViewHelper geschleust werden.
Beispiel
<f:format.urlencode>Text mit ein npaar Sonderzeichen, die für die URL entsprechend maskiert werden müssen: @+%/</f:format.urlencode>
Ergebnis:
Text%20mit%20ein%20npaar%20Sonderzeichen%2C%20die%20f%C3%BCr%20die%20URL%20entsprechend%20maskiert%20werden%20m%C3%BCssen%3A%20%40%2B%25%2F