Datenbankfelder dynamisch per stdWrap.data auslesen

StdWrap gibt einem mit der .data Eigenschaft viele Möglichkeiten, um Werte von verschiedenen Arten aus der Datenbank auszulesen.

Zunächst einmal ist die Beschreibung in der TSRef, welche Werte bei stdWrap.data überhaupt angegeben werden können, nicht so leicht zu finden. Sie befindet sich übrigens im Berreich Data types reference unter „gettext“.

Dort wird unter anderem beschrieben, wie man den Header des Content-Elementes 234 auslesen kann. Und zwar so:

lib.myObject = TEXT
lib.myObject.data = DB : tt_content:234:header

Ebenso kann man auch den Titel eines bestimmten tt_news records auslesen:

lib.myNewsTitle = TEXT
lib.myNewsTitle.data = DB : tt_news:112:title

In der Regel ist es aber so, dass man die News, deren Titel man ausgeben möchte, nicht vorher kennt, sondern dynamisch auslesen möchte – z.B. aus den an die Seite übergebenen Parameter. Glücklicherweise gibt es einen Kunstgriff, mit dem sich auch dieses bewerkstelligen lässt. So lässt sich der Titel, der aktuell in der Single Ansicht angezeigten News ausgeben:

lib.myNewsTitle = TEXT
lib.myNewsTitle {
dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:title
wrap3 = {|}
insertData=1
}

Erklärung: Innerhalb des DataWraps werden Vorkomnisse von geschwungenen Klammern durch den entsprechenden getText Wert ersetzt. TYPO3 würde im obigen Beispiel also {GPvar:tx_ttnews|tt_news} durch den entsprechenden GET-Parameter der aktuell angezeigten News, z. B. mit uid 5 ersetzen. Dieser Prozess funktioniert jedoch nur einmal und nicht geschachtelt. dataWrap erzeugt daher die Ausgabe DB:tt_news:5:title

Durch den wrap (wrap3, da dieser erst nach dataWrap ausgeführt wird) wird aus dieser Ausgabe {DB:tt_news:5:title}. Dadurch, dass insertData gesetzt ist, wird stdWrap nun wiederum diesen Wer durch den entsprechenden gettext Wert ersetzen, als Ergebnis wird der Titel der aktuellen News auszugeben.

Um dieses Beispiel zu verstehen, muss man wissen, dass die stdWrap Funktionen in TYPO3 weder in zufälliger Reihenfolge noch so ausgeführt werden, wie sie im Quellcode stehen. Die verschiedenen Funktionen von TypoScript werden immer in einer exakt vorgegebenen Reihenfolge ausgeführt, und zwar in der Reihenfolge, in der sie in der TSRef von stdWrap stehen.

Also wird erst der dataWrap ausgeführt, dann der wrap3 und zuletzt das insertData.

Statt dem wrap3 hätte man auch den outerWrap nutzen können, da dieser ebenfalls nach dem dataWrap, aber vor dem insertData ausgeführt wird. Des Weiteren hätte man mit einer Verschachtelung des stdWrap arbeiten können.

Getagged mit:
Veröffentlicht unter TYPO3 Technik
Ein Kommentar auf “Datenbankfelder dynamisch per stdWrap.data auslesen
  1. arialscorpio sagt:

    Danke!

1 Pings/Trackbacks für "Datenbankfelder dynamisch per stdWrap.data auslesen"
  1. […] Kollegen der marit.ag haben vor Längerem den Artikel “Datenbankfelder dynamisch per stdWrap.data auslesen” verfasst. Damit ließe sich (via “getText”) auf beliebige Datensätze dynamisch […]

Schreibe einen Kommentar

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

*