

Das CONTENT Objekt wird in TYPO3 zum Auslesen von Daten aus einer Tabelle verwendet. Es erweist sich als besonders nützlich wenn man die eingegebenen Daten in einem untypischen Format benötigt, z.b. als Parameter für Flash Elemente.
Im folgenden Artikel wird anhand von Beispielen die Grundfunktionalität des CONTENT Objekts beschrieben, sowie einige erweiterte Einsatzmöglichkeiten behandelt.
Fangen wir mit einem einfachen Beispiel für das CONTENT Objekt an:
Einfaches Auslesen von maximal 10 Inhalten aus der rechten Spalte der aktuellen Seite. Falls ein Bild angehängt wurde wird auch dieses angezeigt.
temp.right_content=CONTENT temp.right_content{ # Die Tabelle aus der gelesen wird (Die einzigen zugelassenen Tabellen sind "pages" oder Tabellen mit dem Präfix "tt_","tx_","ttx_","fe_" oder "user_") table=tt_content # wrap um das gesamte Element wrap=| # die eigentliche SQL-Query select{ # Angabe des Feldes für die Sprache languageField=sys_language_uid # Limitierung auf 10 Einträge max=10 # selectFields muss nicht angegeben werden, der default Wert ist *. Aus perfomance Gründen empfielt es sich aber nur die Felder hier anzugeben die auch benutzt werden selectFields=image,header # Where -Klausel, in diesem fall colPos=2 für die rechte Spalte where=colPos=2 } renderObj=COA renderObj{ # ein Image Objekt erstellen 5=IMAGE 5{ # Objekt nur ausgeben wenn nicht leer required=1 wrap=| file.import=uploads/pics/ file.import.field=image file.width=100 file.height=100 } # Den Header des Content Elements ausgeben 10=TEXT 10{ required=1 wrap=| field=header } # Folgendes TEXT Element gibt alle verfügbaren Felder aus, d.h. wenn man selectFields nicht setzt sieht man hier alle Felder die in der Datenbank vorhanden sind. #20=TEXT #20.data = debug:data } }
Im Wesentlichen besteht das CONTENT Elemten aus 2 Teilen: dem select Teil und dem renderObj. Im select wird die eigentliche SQL Abfrage definiert und im renderObj wird definiert welche Felder wie formatiert ausgegeben werden.
Am flexibelsten ist man wenn man das renderObj als COA definiert, denn dann kann man darin beliebig viele andere cObject wie TEXT,IMAGE etc erstellen.
CONTENT Objekte können auch verschachtelt werden. Man definiert im renderObj noch ein CONTENT Objekt, welches dann auf die Felder des "oberen" CONTENT Elements zugreifen kann.
Folgendes Beispiel gibt die Überschrift der Seite aus, liest alle Unterseiten der aktuellen Seite aus und giebt das jeweils erste Element auf dieser Seite aus. Falls ein Bild vorhanden ist wird auch dieses ausgegeben, auch wird ein Link auf die entsprechende Seite erstellt und die ersten 20 Zeichen des Textes ausgegeben.
temp.sectionMenu=COA temp.sectionMenu{ 5=TEXT # Titel der Übergeordneten Seite 5.data=leveltitle:-2 5.wrap= <h1>|</h1> # erstes CONTENT Objekt zum Auslesen der Unterseiten. 10=CONTENT 10{ stdWrap.wrap=| table=pages select.orderBy=sorting # falls dieses Element als Sitemap eingefügt wird, den Startpunkt berücksichtigen select.pidInList.if.isTrue.field=pages select.pidInList.field=pages renderObj=COA renderObj{ stdWrap.wrap=| # Titel (und link auf die) Seite 5=TEXT 5.wrap=<b>|</b> 5.field=title 5.typolink.parameter.field=uid # 2. CONTENT Objekt zum Auslesen des erstes Content Element der Seite 10=CONTENT 10{ table=tt_content select.pidInList.field=uid select.where=colPos=0 select.orderBy=sorting select.max=1 renderObj=COA #Bild auslesen renderObj.2=IMAGE renderObj.2{ wrap=| # nur anzeigen wenn auch ein Bild vorhanden stdWrap.if.isTrue.field=image stdWrap.typolink.parameter.field=pid file.import=uploads/pics/ file.import.field=image # Höhe und Breite des Bilds file.width=100 file.height=100 } #auslesen des bodytext renderObj.10=TEXT renderObj.10{ field=bodytext #bodytext nach 20 zeichen abschneiden, wenn möglich ganze wörter crop=20 | ... |1 } } # mehr link 20=TEXT 20.wrap=<b>|</b> 20.value=[mehr] 20.typolink.parameter.field=uid } } }
OptionSplit kennt man ja schon von Menüs, aber wie wendet man das ganze auf CONTENT Objekte an?
Wenn man in der TSREF nachliest, sieht man, dass viele Eigenschaften der Menü Objekte +opionSplit haben, jedoch keine anderen Objekte haben einen dementsprechenden Vermerk.
Lösen kan man das ganze indem man die split Funktion verwendet.
Prinzipiell funktioniert das ganze so, das man nach jedem Elemente das danach mit optionSplit ausgegeben werden soll einen Platzhalter setzt und diesen dann danach mit split zu ersetzt.
Folgendes Beispiel gibt die Überschrift und den Text der Inhaltselemente der aktuellen Seite aus und das in folgender Form :
<div class="first">Erstes </div> <div class="second">zweites</div> <div class="third">drittes</div> <div class="middle1">mittleres farbe 1</div> <div class="middle2">mittleres farbe 2</div> <div class="middle1">mittleres farbe 1</div> <div class="middle2">mittleres farbe 2</div> <div class="last">letztes Element</div>
Typoscript:
#CONTENT Objekt erstellen temp.contentToSplit=CONTENT temp.contentToSplit{ table=tt_content renderObj=COA renderObj{ # An jedes ausgelesene Elemen am Ende ###SPLITTER### anhängen stdWrap.outerWrap = |###SPLITTER### 10=TEXT 10.field=header 10.wrap=|<br> 20=TEXT 20.field=bodytext 20.wrap=|<br> } } temp.content = COA temp.content { # Den ausgelesenen Inhalt hierhin kopieren 10 < temp.contentToSplit stdWrap.split { # mit hilfe der split funktion ###SPLITTER### ersetzen. token = ###SPLITTER### # die Reihenfolge im gewohnen optionSplit Stiel festlegen cObjNum = 1 || 2 || 3 |*| 4 || 5 |*| 6 || 7 # Definieren wie genau an welcher position "gewrapt" wird 1.current = 1 1.wrap = <div class="first">|</div> 2.current = 1 2.wrap = <div class="second">|</div> 3.current = 1 3.wrap = <div class="third">|</div> 4.current = 1 4.wrap = <div class="middle1">|</div> 5.current = 1 5.wrap = <div class="middle2">|</div> 6.wrap = <div class="last">|</div> 6.current = 1 # letzten splitter leer lassen, da ist ja dann nichtsmehr 7.current = 1 } }
Dieser Ansatz lasst sich auch recht einfach auf das normale styles.content.get anwenden.
Beispiel:
#setzen des Platzhalters für alle tt_content elemente tt_content.stdWrap.outerWrap = |###SPLITTER### temp.content = COA temp.content { 10 < styles.content.get stdWrap.split { token = ###SPLITTER### cObjNum = 1 || 2 || 3 |*| 4 || 5 |*| 6 || 7 1.current = 1 1.wrap = <div class="first">|</div> 2.current = 1 2.wrap = <div class="second">|</div> 3.current = 1 3.wrap = <div class="third">|</div> 4.current = 1 4.wrap = <div class="middle1">|</div> 5.current = 1 5.wrap = <div class="middle2">|</div> 6.wrap = <div class="last">|</div> 6.current = 1 7.current = 1 } }
Beispiele:
Content Element die die Elemente einzeln anzeigt
10 letzten geänderten Inhaltselemente ausgeben
Offizielle Dokumentation:


Kommentare (1)