TypoScript - Daten auslesen
Manchmal möchte man schnell auf Daten zugreifen die in irgendwelchen Tabellen oder in den Arrays von Typo3 abgelegt sind. Z.B. ein einzelner Datensatz oder eine Globale Variable. Hier sind einige Tricks:
Detailierte Referenz in der TSRef unter stdWrap und dem Datentyp data (getData)
Feld aus der Tabelle pages auslesen
Aus der Tabelle Pages (die Datensätze der aktuellen Seite)
temp.meinText = TEXT temp.meinText.field = title
Hinweis: field ersetzt das .value das man sonst für Werte benutzt also nicht ...field.value = title
Subtitle ausgeben wenn der nicht vorhanden dann title:
... temp.meinText.field = subtitle // title
Das // ist eine Art oder Bedingung die ausgeführt wird, wenn das erste Feld leer ist.
Flexible Datenbankabfragen mit data
Anstatt mit field kann man auch mit data arbeiten:
temp.meinText.data = field:title
data kann aber auch flexibler arbeiten.:
temp.meinText.data = DB:pages:1:title # hole mir aus der Tabelle pages vom Datensatz mit der uid=1 den Titel
Allgemein:
.data = DB:[Tabelle]:[uid]:[Feld]
Zugriff auf GET und POST Variablen mit GPvar
Beispiel: Im Browser wird eine GET Variable mitgegeben:
http://meineDomain.de/index.php?id=2&meineVariable=Hallo
Im TypoScript wird sie ausgelesen, wenn keine Variable übergeben wurde soll ein Feld aus der Datenbank ausgelesen werden (oder Bedingung)
page.10.meinTextobjekt = GPvar : meineVariable // field : title
Einen einzelnen Datensatz auslesen
subparts.HEADERIMAGE =RECORDS
subparts.HEADERIMAGE{
tables = tt_content
source=84
}
Beispiele
#Schnellzugriff auf Variablen:
{field:title}
#Bild aus einem Media Feld auslesen altImgResource.import = uploads/media/ altImgResource.import.field = media altImgResource.import.listNum = 0
Wie speichert Typo3 Daten?
Im ersten Schritt enthält dieser Artikel erst einmal eine Lose Sammlung der Arrays etc. Später soll die Sammlung besser strukturiert werden.
Wenn eine Seite gerendert wird, dann hält Typo3 für diese Seite in diversen Arrays die relevanten Daten vor. Z.B. die Seiten id (uid) etc. TypoScript Funktionen greifen sinnigerweise immer auf die Daten der aktuellen Seite zu. Beim Rendering von Menüs verhält sich das etwas anders. Hier ist es notwendig auch auf Daten von anderen Seiten zuzugreifen. Sonst kann ja das Menü nicht z.B. nicht richtig verlinkt werden.
Hintergrund ist, daß normalerweise das Array $cObj->data den Datensatz der aktuellen Seite enthält. Z.B. kann man mit:
page = PAGE
page {
10 = TEXT
10.field = title
}
Den Titel der aktuellen Seite auslesen.
Beim Rendering eines Menüs enthält das Array $cObj->data den Datensatz der Seite, deren Menüentrag gerade gerendert wird.
NO{
stdWrap.field = title
}
gibt also den Titel der Seite aus, deren Menüpunkt gerade gerendert wird. Macht Sinn - oder?