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!

4 Kommentare

  • 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 🙁

Schreibe einen Kommentar zu Stefan Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Highlighting von Codes ist mit den Tags  [ts], [php], [html], [javascript], [xml] oder [code] möglich.