TYPO3 & Fluid: GET / POST Parameter auslesen
Heute mal wieder in kleines Snippet fürs Fluid Templating in TYPO3. Hierbei ist es hin und wieder hilfreich GET oder POST Parameter auszulesen um diese zum Beispiel in Conditions zu verwenden. Bedauerlicherweise konnte ich hierfür weder im normalen Fluid noch bei VHS einen entsprechenden ViewHelper finden, daher möchte ich hier ein kleines Workaround posten.
Wie bereits erwähnt wäre es zum Beispiel möglich einen ViewHelper zu schreiben der GET oder POST Parameter liefert. Auch könnte man den Wert von GET / Post Parametern aus dem Controller direkt ans Fluid übergeben:
$GPvariable = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('meineVariable'); $this->view->assign('GPVariable',$GPvariable);
Wie so oft bei komplexeren Sachen kann man sich jedoch auch einfach dem funktionsreichen Typoscript bedienen und die Verarbeitung dort durchführen lassen.
Hier also eine kleine Typoscript Lib die den Wert einer beliebigen GET / POST Variable zurückgibt:
lib.gpvar = COA lib.gpvar { # Schuetzt vor XSS, daher auch ein COA! stdWrap.htmlSpecialChars = 1 10 = TEXT 10 { dataWrap = GP:{current} insertData = 1 wrap3 = {|} } }
Der Aufruf kann dann beispielsweise so im Fluid erfolgen:
{f:cObject(typoscriptObjectPath: 'lib.gpvar', data: 'wunschparameter')}
Wichtiger Hinweis:
Beachtet beim Umgang mit GET Variablen immer das ihr euch vor XSS Angriffen schützt! Gebt die Werte aus GET Parametern niemals unverarbeitet zurück in die Ausgabe und „escaped“ die Werte mit htmlspecialchars!
Danke für das wertvolle Snippet. Es funktioniert perfekt, solange die Parameter nicht verschachtelt sind.
In folgendem Fall wird ein leerer String zurück gegeben statt des Inhalts der Get-Variable „tx_ttnews[tt_news]“:
[html]
{f:cObject(typoscriptObjectPath: ‚lib.gpvar‘, data: ‚tx_ttnews|tt_news‘)}
[html]
Woran könnte das liegen?
Hallo Adrian,
vielleicht kommt das darin enthaltene „|“ dem wrap3 in die Quere. Möglicherweise muss man das Typoscript Objekt für solche Fälle anders verschachteln… leider fehler mir gerade die Zeit dafür. Wenn Du etwas herausfindest wäre es nett wenn Du es uns mitteilst.
Danke für die Antwort und den Tipp.
Nach einem Blick in die Dokumentation (https://docs.typo3.org/typo3cms/TyposcriptReference/Functions/Stdwrap/Index.html#wrap3) habe ich folgendes probiert, jedoch noch immer ohne den gewünschten Effekt:
[ts]
lib.gpvar = COA
lib.gpvar {
stdWrap.htmlSpecialChars = 1
10 = TEXT
10 {
dataWrap = GP:{current}
insertData = 1
wrap3 = {-}
wrap3.splitChar = –
}
}
[ts]
Für den Moment lebe ich mit statischen Variante:
[ts]
lib.eddPi3secHashOccId = TEXT
lib.eddPi3secHashOccId.data = GP:tx_tx_ttnews|tt_news
[ts]
Die Pipe kommt nicht dem wrap3 sondern dem dataWrap in die Quere und das bietet unglücklicherweise nicht die Möglichkeit einen anderen solitChar zu setzen 🙁
Folgendes geht, zumindest bei uns in der TYPO3v8. Damit gehen dann auch verschachtelte Parameter…
Hallo, dazu folgende Frage von meiner Seite aus:
Ich versuche über so einen Get-Parameter den header von Datensätzen in einer Seite aus zu geben. Funktioniert soweit, allerdings mit dem Problem, dass ich den header immer nur in der default Sprache ausgeben kann (DE). Leider habe ich das Frontend noch in IT und EN. Könnt ihr mir sagen, wie ich den Header entsprechend der Sprache noch ausgeben kann.
Vielen Dank
Das cObject CONTENT wird von der TYPO3-Übersetzungslogik automatisch behandelt.
Probieren Sie es mal mit folgendem: