===== CARRAY ===== Steht für //Content Array// und ermöglicht das Beschreiben von cObjects in nummerierter Reihenfolge. Es ist aber selbst kein echtes cObject, was frei verwendet werden kann. Das Top Level Object ''page'' z.B. ist vom Typ //carray//, wodurch ermöglicht wird, Inhaltselemente nummeriert auszugeben. ^Eigenschaft^Datentyp^Beschreibung^ ^1,2,3,4 ...|[[typo3:about:datentypen#cobject|cObject]]|Enthält die einzelnen cObjects. Die Reihenfolge der Ausgabe erfolgt anhand der Nummerierung, unabhängig von der Reihenfolge im Setup-Feld.| ^stdWrap-Eigenschaften|stdWrap|Ermöglicht stdWrap-Funktionen.| ^
page = PAGE
page {
20 = TEXT
20.value = folge
10 = TEXT
10.value = Reihen
wrap = |
}
# Ausgabe: Reihenfolge
----
===== CASE =====
Ermöglicht eine Fallunterscheidung. Unter ''key'' wird üblicherweise ein dynamischer Wert, z.B. ein Datenbankfeld ausgelesen. Das Ergebnis ist der Schlüsselbegriff, der mit den frei benannten cObjects verglichen wird. Die Schlüsselbegriffe können Integer-Werte oder Strings sein, dürfen aber nicht mit den folgenden Begriffen übereinstimmen, da sie Eigenschaften von ''CASE'' darstellen: //key//, //if//, //setCurrent//, //stdWrap//. Das als //default// benannte cObject wird verwendet, wenn kein anderes cObject mit dem Schlüsselbegriff übereinstimmt.
^Eigenschaft^Datentyp^Beschreibung^
^key|[[typo3:about:datentypen#string|string]] / stdWrap|Hier wird der Schlüsselbegriff ausgelesen. Üblicherweise werden die stdWrap-Eigenschaften verwendet, also z.B. ''key.data'' oder ''key.field''.|
^[Schlüsselbegriffe]|[[typo3:about:datentypen#cobject|cObject]]|Die erwarteten, möglichen Ergebnisse von ''key'' werden als Namen für cObjects verwendet. Hier kann also die gewünschte Ausgabe definiert werden.|
^default|[[typo3:about:datentypen#cobject|cObject]]|Dieses cObject wird verwendet, wenn die anderen aufgeführten Schlüsselbegriffe nicht mit dem Wert aus ''key'' übereinstimmen.|
^if|[[typo3:about:functions:if|if]]|Identisch mit der stdWrap-Funktion ''if''. Wenn das Ergebnis //false// ist, wird das gesamte CASE-Objekt nicht gerendert.|
^setCurrent|[[typo3:about:datentypen#string|string]] / stdWrap|Ersetzt den aktuellen Wert des Elternelements durch den folgenden String.|
^stdWrap|stdWrap|Ermöglicht stdWrap-Funktionen für jedes Objekt, egal wie der key-Wert lautet.|
Im folgenden Beispiel wird unter ''key'' der Benutzername abgefragt. Stimmt er mit //johndoe// überein, wird ein personalisierter Gruß ausgegeben, sonst mit ''default'' ein allgemeiner. Mit der ''if''-Abfrage wird geprüft, ob überhaupt ein Frontend-Benutzer eingeloggt ist. Ist das nicht der Fall, erfolgt auch keine Ausgabe (eine persönliche Ansprache ließe sich natürlich sinnvoller anlegen).
10 = CASE
10 {
key.data = TSFE:fe_user|user|username
if.isTrue.data = TSFE:fe_user|user|username
johndoe = TEXT
johndoe.value = Willkommen, John Doe!
default = TEXT
default.value = Willkommen!
}
----
===== COA, COA_INT, COBJ_ARRAY =====
Steht für //Content Object Array//. Ermöglicht das Zusammenfassen mehrerer Inhaltselemente, um sie anschließend als eines zu behandeln. ''COA'' und ''COBJ_ARRAY'' sind einander identisch (''COBJ_ARRAY'' wurde in TYPO3 7.4 entfernt). Bei ''COA_INT'' wird der Inhalt nicht im Cache gespeichert.
^Eigenschaft^Datentyp^Beschreibung^
^1,2,3,4 ...|cObject|Enthält die einzelnen cObjects. Die Reihenfolge der Ausgabe erfolgt anhand der Nummerierung, unabhängig von der Reihenfolge im Setup-Feld.|
^if|if|Identisch mit der stdWrap-Funktion ''if''. Wenn das Ergebnis //false// ist, wird das gesamte COA nicht gerendert.|
^wrap|wrap / stdWrap|Umschließt das gesamte COA.|
^stdWrap|stdWrap|Ermöglicht stdWrap-Funktionen für das COA.|
Im ersten Beispiel würde der Seiteninhalt der Spalte ''0'' durch die ''if''-Abfrage nur eingeloggten Frontend-Benutzern zur Verfügung stehen (andere Vorgehensweisen sind sinnvoller!).
10 = COA
10 {
if.isTrue.data = TSFE:fe_user|user|username
10 = TEXT
10.value = Willkommen!
10.wrap = |
20 < styles.content.get
}
Das zweite Beispiel mit ''COA_INT'' ermöglicht die Ausgabe der aktuellen Uhrzeit zum Zeitpunkt des Seitenaufbaus.
10 = COA_INT
10 {
10 = TEXT
10.data = date:H:i:s
}
----
===== CONTENT =====
Erzeugt Inhalt aus Datenbank-Tabellen.
^Eigenschaft^Datentyp^Beschreibung^
^select|[[typo3:about:functions:select|select]]|Steuert die [[basics:sql|SQL]]-Abfrage auf die Datenbank.|
^table|//Tabellenname//|Die Tabelle, aus der Inhalt ausgelesen werden soll. Üblicherweise ist das tt_content. Erlaubt sind nur Tabellen mit den Präfixen ''tt_'', ''tx_'', ''ttx_'', ''fe_'', ''user_'' sowie die Tabelle ''pages''.|
^renderObj|cObject|Definiert die Ausgabe der Datensätze. Einzelne Felder können ausgelesen und die Ergebnisse mit stdWrap bearbeitet werden.\\ Wenn kein renderObj festgelegt wurde, setzt TYPO3 automatisch ''renderObj < [Tabellenname aus select]''. Damit werden die entsprechenden Angaben z.B. für //tt_content// aus ''css_styled_content'' ausgelesen. Wurde ''css_styled_content'' nicht inkludiert, erfolgt keine Datenausgabe im Frontend!|
^wrap|wrap|Umschließt die gesamte Ausgabe.|
^stdWrap|stdWrap|Wird nach wrap ausgeführt.|
^slide|[[typo3:about:datentypen#integer|integer]] / stdWrap|Vererbung von Inhalt: Wenn durch ''select'' kein Inhaltselement gefunden wurde, kann hiermit entlang der rootline nach Inhalt auf anderen Seiten gesucht werden. Stoppt bei der ersten Seite mit Inhalt.\\ Mögliche Werte sind ''-1'' (bis zur root-Seite), ''1'' (nur die aktuelle Ebene) und ''2'' (eine Ebene höher). Nutze ''-1'' bei Kombination mit ''slide.collect''.|
^slide.collect|[[typo3:about:datentypen#integer|integer]] / stdWrap|Kann zusätzlich zu ''.slide'' verwendet werden, um alle gefundenen Inhaltselemente auf der aktuellen Seite sowie der übergeordneten Seiten auszugeben.\\ Mögliche Werte sind ''-1'' (bis zur root-Seite) und ein positiver Wert, der die Anzahl der zu durchsuchenden Ebenen angibt.|
^slide.collectFuzzy|[[typo3:about:datentypen#boolean|boolean]] / stdWrap|Falls bis zur festgelegten Ebene keine Inhalte gefunden wurde, sucht TYPO3 weiter entlang der rootline bis zum ersten Treffer.|
^slide.collectReverse|[[typo3:about:datentypen#boolean|boolean]] / stdWrap|Angabe nur sinnvoll zusammen mit ''.slide.collect''. Ordnet die Inhaltselemente anders an: Die Inhalte der aktuellen Seite werden zuletzt ausgegeben.|
# Allgemeines Beispiel
page.10 = CONTENT
page.10 {
table = tt_content
select {
orderBy = sorting
where = colPos=0
select.languageField = sys_language_uid
}
renderObj = COA
renderObj {
10 = TEXT
10.field = header
10.wrap = |
20 = TEXT
20.field = bodytext
20.wrap = |
}
wrap = |
}
# Vererbung für die rechte Spalte aktivieren
styles.content.getRight.slide = -1
----
===== FILE =====
Mit ''FILE'' wird der __Inhalt__ von Dateien eingebunden, es ist daher nicht zu verwechseln mit ''filelink''. Ein Bild würde ein //img//-Element als Wrap erhalten, die Ausgabe wäre dann identisch mit dem cObject ''IMAGE''. Sinnvoll ist eine Verwendung z.B. von HTML-Dokumenten.
# Identische Ergebnisse:
10 = HTML
10.value = HTML mit value
10.value.case = upper
10.value.wrap = |
20 = HTML
20.value = HTML mit stdWrap
20.stdWrap.case = upper
20.stdWrap.wrap = |
30 = TEXT
30.value = Text
30.case = upper
30.wrap = |
----
===== IMAGE =====
Gibt ein komplettes Image-Tag mit ausgelesenen Größenangaben zurück. Weitere Attribute lassen sich hinzufügen. stdWrap-Funktionen sind nutzbar.
10 = IMAGE
10.file = fileadmin/images/bild.jpg
# Ausgabe:
20 = IMAGE
20 {
file = fileadmin/images/bild.jpg
params = class="foo"
border = 1
altText = Mein Bild
titleText = Mein Bild
longdescURL = http://www.example.org/about-the-image.html
linkWrap = |
# oder
imageLinkWrap = 1
imageLinkWrap {
# weitere Angaben
}
wrap = |
stdWrap {
# weitere Angaben
}
}
----
===== IMG_RESOURCE =====
Gibt nur den reinen Dateipfad zum Bild zurück. stdWrap-Funktionen sind nutzbar.
10 = IMG_RESOURCE
10.file = fileadmin/images/bild.jpg
# Ausgabe: fileadmin/images/bild.jpg
----
===== LOAD_REGISTER =====
LOAD_REGISTER gibt selbst keine Daten aus, sondern bietet die Möglichkeit, das Array //%%$GLOBALS['TSFE']->register[]%%// mit eigenen Werten zu belegen. Diese Inhalte können mit [[typo3:about:datentypen#gettext|getText]] ausgelesen werden.
Die Werte werden im Register wie bei einem Stapel behandelt: der zuletzt angelegte Inhalt liegt oben. Mit ''RESTORE_REGISTER'' wird der oberste Inhalt wieder entfernt. Es muss nicht für jeden neuen Inhalt ein LOAD_REGISTER angelegt werden, die Wertzuweisung kann in einem erfolgen. __Aber:__ Das Entfernen durch RESTORE_REGISTER wird immer auf das gesamte LOAD_REGISTER angewendet!
Auf LOAD_REGISTER kann auch ''stdWrap'' angewendet werden, was es z.B. möglich macht, mit ''cObject'' __umfangreichere Inhalte__ ins Register zu laden (siehe Beispiel 4).
**Beispiel 1:** Es werden zwei Farbangaben mit verschiedenen Namen registriert. Vor der Ausgabe des Inhalts mit der blauen Farbe wird der benötigte zweite Wert jedoch mit RESTORE REGISTER wieder entfernt und kann somit nicht ausgelesen werden.
10 = LOAD_REGISTER
10.roteFarbe = color:red;
15 = LOAD_REGISTER
15.blaueFarbe = color:blue;
20 = TEXT
20.value = Inhalt
20.dataWrap = |
30 = RESTORE_REGISTER
40 = TEXT
40.value = Inhalt
40.dataWrap = |
Ausgabe:
Inhalt
Inhalt
**Beispiel 2:** Es werden nacheinander __zwei Werte in einem Inhalt gleichen Namens__ registriert. Der zuletzt angelegte Inhalt wird ausgelesen. Nach dem Anwenden von RESTORE_REGISTER ist immer noch die erste Wertzuweisung vorhanden und wird entsprechend ausgegeben.
10 = LOAD_REGISTER
10.farbe = color:red;
15 = LOAD_REGISTER
15.farbe = color:blue;
20 = TEXT
20.value = Inhalt
20.dataWrap = |
30 = RESTORE_REGISTER
40 = TEXT
40.value = Inhalt
40.dataWrap = |
Ausgabe:
Inhalt
Inhalt
**Beispiel 3:** Die beiden Wertzuweisungen sind diesmal in __einem__ LOAD_REGISTER definiert. Durch RESTORE_REGISTER werden __beide__ Farbangaben entfernt und können für den zweiten Inhalt nicht mehr ausgelesen werden.
10 = LOAD_REGISTER
10.roteFarbe = color:red;
10.blaueFarbe = color:blue;
20 = TEXT
20.value = Inhalt
20.dataWrap = |
30 = RESTORE_REGISTER
40 = TEXT
40.value = Inhalt
40.dataWrap = |
Ausgabe:
Inhalt
Inhalt
**Beispiel 4:** Mit ''cObject'' können auch __umfangreichere Inhalte__ zwischengespeichert werden:
10 = LOAD_REGISTER
10.diverseElemente.cObject = COA
10.diverseElemente.cObject {
10 = TEXT
10.value = Inhalt
10.wrap = |
20 = IMAGE
20.file = fileadmin/images/gitarre.png
}
20 = TEXT
20.data = register:diverseElemente
Ausgabe:
Inhalt
**Beispiel 5:** Mit ''dataWrap'' lässt sich der Inhalt des Registers um dynamischen Inhalt erweitern. Dies ist auch aus dem Register selbst möglich, sogar aus dem aktuell zu definierenden:
10 = LOAD_REGISTER
10.helloworld = Hello
20 = LOAD_REGISTER
20.helloworld.dataWrap = {register:helloworld} world!
30 = TEXT
30.data = register:helloworld
Ausgabe:
Hello world!
__Hinweis:__ Würde im letzten Beispiel ''40 = RESTORE_REGISTER'' ausgeführt und anschließend erneut //register:helloworld// ausgegeben, wäre dieser neue Inhalt wieder nur //Hello// aus ''10''. Registereinträge gleichen Namens werden halt nie überschrieben, sondern es wird immer ein neuer Eintrag hinzugefügt.
----
===== RECORDS =====
Ermöglicht die Ausgabe von einzelnen Datensätzen aus beliebigen Tabellen. Die Ausgabe ist abhängig von der Erreichbarkeit der Seite, auf der die Inhalte liegen. Einträge auf versteckten, zeitgesteuerten oder zugriffsgeschützten Seiten werden nicht ausgegeben (diese Prüfung kann mit ''dontCheckPid'' deaktiviert werden). Unabhängig davon werden ausgeblendete, zugriffsgeschützte oder als gelöscht markierte Datensätze ebenfalls nicht ausgegeben.
^Eigenschaft^Datentyp^Beschreibung^
^tables|//Liste von Tabellen//|Liste der durchsuchten Tabellen.
10.tables = tt_content,pages_language_overlay
|
^source|//Liste von UIDs// / stdWrap|Liste der auszugebenden Datensätze. Wenn Inhalte aus mehr als einer Tabelle ausgegeben werden sollen, empfiehlt sich die Nutzung von vorangestellten Tabellennamen (z.B. //tt_content_5//). Fehlt das Tabellen-Präfix, wird von der ersten Tabelle unter ''tables'' ausgegangen.
10.source = tt_content_5,22,pages_language_overlay_10
|
^categories|//Liste von Kategorien//|Seit TYPO3 CMS 6.0|
^dontCheckPid|boolean|Wenn aktiviert, werden auch Einträge auf nicht erreichbaren Seiten angezeigt. Eine Verlinkung mit ''typolink'' schlägt aber weiterhin fehl.|
^conf.[Tabelle]|cObject|Hiermit wird das Rendering für die Ausgabe im Frontend gesteuert. Fehlt diese Angabe, wird das Top Level Object mit diesem Tabellennamen verwendet. Bei //css_styled_content// wird //tt_content// als CASE-Objekt angelegt, die Ausgabe erfolgt dann je nach CType.\\ Fehlt auch ein TLO, erfolgt keine Ausgabe!
10.conf.tt_content = TEXT
10.conf.tt_content {
field = header
}
10.conf.pages_language_overlay = TEXT
10.conf.pages_language_overlay {
field = title
}
|
^wrap|wrap / stdWrap|Ermöglicht einen Wrap für die einzelnen Datensätze.|
^stdWrap|stdWrap|Wird nach ''wrap'' ausgeführt.|
Mit dem folgenden Beispiel wird ein einzelnes Inhaltselement geladen, mit dem Standard-Rendering der angegebenen Tabelle.
10 = RECORDS
10 {
tables = tt_content
source = 28
}
Das folgende Beispiel liest die Datensätze **5** und **22** aus //tt_content// sowie den Datensatz **10** aus //pages_language_overlay// aus und gibt deren Header bzw. Title in einer Liste aus. Die Header aus //tt_content// werden zudem verlinkt mit deren PID und einer Sprungmarke zum jeweiligen Inhaltselement.
20 = RECORDS
20 {
source = ,tt_content_5, 22, pages_language_overlay_10
tables = ,tt_content, pages_language_overlay
dontCheckPid = 1
wrap = |
conf.tt_content = TEXT
conf.tt_content {
field = header
typolink.parameter = {field:pid}
typolink.parameter.insertData = 1
typolink.section = {field:uid}
typolink.section.insertData = 1
wrap = |
}
conf.pages_language_overlay = TEXT
conf.pages_language_overlay {
field = title
wrap = |
}
}
----
===== RESTORE_REGISTER =====
Entfernt den __zuletzt angelegten__ Wert aus dem Register. Das Entfernen eines frei wählbaren Registereintrags ist nicht möglich. Siehe ''LOAD_REGISTER''. RESTORE_REGISTER hat keine weiteren Eigenschaften, die definiert werden könnten.
----
===== TEXT =====
Entgegen der Norm werden die stdWrap-Eigenschaften bei **TEXT** nicht unterhalb einer Eigenschaft ''stdWrap'' ausgeführt, sondern direkt auf dem root-Level des cObjects **TEXT**. Siehe **HTML**.