TypoScript - Daten auslesen

Aus Wikizone
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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[Bearbeiten]

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[Bearbeiten]

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]

Ein Datum abfragen[Bearbeiten]

temp.Datum = TEXT
temp.Datum.data = date : d.m.Y

Hierbei kann man die Formatierung hinter dem Doppelpunkt angeben (Syntax wie in PHP)

Zugriff auf GET und POST Variablen mit GPvar[Bearbeiten]

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

Variablen auslesen und speichern mit dem register array[Bearbeiten]

das Register Array speichert sowohl allgemeine Typo3 Variablen wie die letzte Änderung eines Datensatzes, kann aber auch genutzt werden um innerhalb eines Objektes Daten zu speichern und wieder abzurufen.

Speichern und auslesen mit Register[Bearbeiten]

Beispiel 1

(Dies setzt "contentWidth", "label" und "head")

page.27 = LOAD_REGISTER
page.27 {
 contentWidth = 500
 label.field = header
 head = ein Text
 head.wrap =  | 
}


Beispiel 2

temp.anything = COA
temp.anything {
   1 = LOAD_REGISTER
   1.myVar = foo
   10 = TEXT
   10.data = register : myVar
}

Abruf dieses Wertes in anderem Objekt funktioniert nicht:

temp.something = COA
temp.something {
   10=TEXT
   10.data=register:myVar
}

Folgendes funktioniert selbstverständlich:

temp.somethingElse < temp.anything
temp.somethingElse {
   10>
   10=TEXT
   10.value = Another value here.
   20=TEXT
   20.data=register:myVar
}

Einen einzelnen Datensatz auslesen[Bearbeiten]

   subparts.HEADERIMAGE =RECORDS

   subparts.HEADERIMAGE{
      tables = tt_content
      source=84
   }


Beispiele[Bearbeiten]

#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?[Bearbeiten]

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?



POST GET Daten an ein Script übergeben und dort nutzten[Bearbeiten]

(Beispiel aus typo3.net Forum

ich rufe meine Seite auf:

index.php?id=20&person=9

Ich habe auf die Seite ein PHP-Script eingebungen und rufe es dann über ein USER_INT objekt auf:

page.10.marks {
DATEN = USER_INT
DATEN.userFunc = user_functions->formular
DATEN.person = ?????????????????????
}

person ist ein Parameter, der im PHPScript später mit

$conf["person"]

zur Verfügung stehen soll!

Wie übergebe ich nun der Funktion im PHP-Script den Wert aus der URL? das data-Objekt steht mir ja hier nicht zur Verfügung!

Oder wie kann ich den Wert im PHP direkt abfragen? ($HTTP_GET_VARS["person"] funktioniert nicht!)

Verfasst am: 26.09.2005 [13:06]

$persondata = t3lib_div::GPvar("person");


Weitere Möglichkeiten[Bearbeiten]

temp.myPage{
 10 = TEXT
 10.wrap = Du bist auf Seite: |
 10.data  = TSFE : id
}
temp.myEmail{
10 = TEXT
10.dataWrap = <div class="logoutname">({TSFE:fe_user|user|email})</div> 
}

aus : http://typo3-blog.net/blog/cookie-typoscript.html Zugriff 30.1.2009

Cookies in TYPO3 per Typoscript anzeigen

   temp.mycookie = TEXT 
   temp.mycookie.data = global : HTTP_COOKIE_VARS | mycookie
   temp.mycookie.ifEmpty = Cookie "mycookie" war nicht gesetzt

Dieser Typoscript Code gibt den Inhalt des Cookies Namens "mycookie" aus, wenn dieser gesetzt war. Ansonsten gibt er den alternativen Text 'Cookie "mycookie" war nicht gesetzt' aus.


Mit .data Attribut des Typoscript TEXT-Objekts GET- und POST Variablen anzeigen

GET- und POST Variablen, z.B. aus Ergebnissen von Formulareingaben können ebenfalls über data angezeigt werden:

   temp.mycookie = TEXT 
   temp.mycookie.data = GPvar : formular
   temp.mycookie.ifEmpty = Formular wurde noch nicht abgesendet

GPvar unterscheidet leider nicht zwischen POST- und GET Variablen was bei standardmäßig vorhandenen GET-Variablen (z.B. id und type) zu Verwirrungen führen kann. Deshalb sollte man solche Benennungen vermeiden.


Cookie zum Auswählen eines Datensatzes nutzen

Wenn der Cookie nun Beispielsweise nicht einen auszugebenden Text sondern die ID eines Datensatzes (zum Beispiel aus tt_address) enthielt, kann man den Cookie wie folgt zu einer Datenbankabfrage per Typoscript nutzen:

temp.main.15 = CONTENT
temp.main.15 {
  table = tt_address
  select {
    pidInList = 13
    where.stdWrap.cObject = TEXT 
    where.stdWrap.cObject.data = global : HTTP_COOKIE_VARS | meine_adresse
    where.stdWrap.cObject.wrap = uid = |
  }
  renderObj = COA
  renderObj {
    10 = TEXT
    10.value = <h1>Adresse</h1>
    20 = TEXT
    20.field = name
    20.wrap = <p>|<br/>
    30 = TEXT
    30.field = address
    30.wrap = |<br/>
    40 = TEXT
    40.field = zip
    40.noTrimWrap = || |
    50 = TEXT
    50.field = city
    50.wrap = |</p>
  }
}

Achtung, CONTENT zeigt nur Inhalte von Datensätze an, die auf einer Seite liegen, die TYPO3 anzeigen würde. Datensätze, deren pid auf SYSORDNER, versteckte, gelöschte oder ähnliche nicht-anzeigbaren Seiten liegen werden vom Typoscript Objekt CONTENT nicht angezeigt!

Mit dem RECORDS Objekt geht es aber:

temp.jobLocation=COA
temp.jobLocation{
  wrap=:|
  10=RECORDS
  10 {
    # id des template-records
    source.data = GPvar: tx_gbjobmanager_pi1|showUid
    #source = 3
    source.insertData = 1
    tables = tx_gbjobmanager_offer
    conf.tx_gbjobmanager_offer = TEXT
    conf.tx_gbjobmanager_offer.field= jobtitle | city | region | country
  }
}

PHP Umgebungsvariablen auslesen[Bearbeiten]

Um auf einer Typo3-Seite PHP-Umgebungsvariablen einzubinden, kann folgender Code im SETUP-Feld eingetragen werden:

lib.browsersprache = TEXT
lib.browsersprache.data = getenv : HTTP_ACCEPT_LANGUAGE

Andere Umgebungsvariablen finden sich unter http://hoohoo.ncsa.uiuc.edu/cgi/env.html.

Text eines TCA-Feldes auslesen[Bearbeiten]

Quelle: http://typo3weblog.de/2008/12/01/adventskalender-2008-turchen-1/

Ich stelle Euch eine recht neue und noch eher unbekannte Funktion des stdWrap vor. Aber schauen wir uns erstmal das TypoScript an, danach erkläre ich, was es damit auf sich hat.

      temp.tcafield = TEXT
      temp.tcafield {
      value = 1
      stdWrap.TCAselectItem.table = fe_users
      stdWrap.TCAselectItem.field = status
      }

Die Ausgabe von temp.tcafield ist jetzt "Student", denn das Feld "Status" beim FE-User hat mit dem Value 1 den Begriff "Student" verknüpft. Wir können also auf diese Art sehr einfach an den Text eines TCA Feldes kommen.

Ein Manko gibt es jedoch noch. Man kann diese Funktion nur auf Felder vom Typ "select" anwenden, und auch nur dann, wenn es keine Datenbank-Relation ist. Ich habe diese Funktion erst kürzlich eingesetzt und mir damit eine Menge Arbeit erspart.

Beispiele[Bearbeiten]

Seitenüberschrift auslesen[Bearbeiten]

lib.test = TEXT
lib.test {
data = page:title
}
<pre>

=== Titel des Content Elements ===
<pre>

Verschiedene Dinge auslesen (Datum, Server, GET,[Bearbeiten]

temp.typo3Variable = COA
temp.typo3Variable {
	5 = TEXT 
	5 {	
	    # Datum
		insertData = 1
		data = date : d-m-y
		wrap = <p> Das Datum heute: | </p>
	}
 
	10 = TEXT 
	10  {	
	    # Lese den Wert einer Spalte aus der Tabelle Pages, hier im Beispiel title
		insertData = 1
		data = page : title
		wrap = <p> Der aktuelle Seitentitel: | </p>
	}
 
	15 = TEXT 
	15  {	
	    # Seitentitel auf der ersten Ebene der Rootline
		insertData = 1
		data = leveltitle : 1
		wrap = <p> Der Seitentitel auf der ersten Ebene der Rootline: | </p>
	}
 
	20 = TEXT 
	20 {	
	    # Seitentitel auf der Seite unterhalb der aktuellen Seite
		insertData = 1
		data = leveltitle : -2
		wrap = <p> Der Seitentitel auf der Unterseite lautet: | </p>
	}	
 
	25 = TEXT 
	25 {	
	    # beliebige Environment Variable auslesen
		insertData = 1
		data = getenv : HTTP_REFERER
		wrap = <p> Der Referer der Setie: | </p>
	}
 
	30 = TEXT 
	30  {	
	    # POST oder GET Vars auslesen, hier im Beispiel die GET Var wohnort
		insertData = 1
		data = global : HTTP_GET_VARS | wohnort
		wrap = <p> Die Get Var wohnort lautet: | </p>
	}	
 
	35 = TEXT 
	35 {	
	    # POST oder GET Vars auslesen, hier im Beispiel die GET Var wohnort
		insertData = 1
		data = global : HTTP_GET_VARS | wohnort
		wrap = <p> Die Get Var wohnort lautet: | </p>
	}
 
	40 = TEXT 
	40 {	
        # Lesen die Daten eines beliegigen Querystrings (hier im Beispiel &name)	
		insertData = 1
		data = GPvar : name
		wrap = <p> Der Name lautet: | </p>
	}
 
	45 = TEXT 
	45  {
		# Auslesen der ID der Typo3 Rootpage
		insertData = 1
		data = leveluid : 0
		wrap = <p> Die Typo3 Rootpage hat die PID : | </p>
	}
 
	50 = TEXT 
	50 {
	    # Auslesen der UID der Seite 
		insertData = 1
		data = TSFE:id
		# oder, oder ...:
		# TSFE:baseUrl
		# TSFE:clientInfo|BROWSER
		wrap = <p> Die uid der Seite lautet : | </p>
	}
	55 = TEXT 
	55  {	
	    # Auslesen einer Spalte aus der Tabelle tt_content, hier die Spalte title der uid = 5
		insertData = 1
		data = DB : tt_content:5:header
		wrap = <p>Die Überschrift des Seiteninhaltes mit der UID 5 lautet: | </p>
	}
}