Eine kleine Einführung in das CONTENT Objekt

 / typo3wizard.com / Artikel / Das CONTENT Objekt

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 bei CONTENT Objekten

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 Navigation

Content Element die die Elemente einzeln anzeigt

10 letzten geänderten Inhaltselemente ausgeben

Random Content

 

Offizielle Dokumentation:

TSREF CONTENT

TSREF select

TSREF split

 


Top 10 Updates

Typoscript Eigenschaften mit stdWrap erweitern geändert am  13-Jun-2008 14:16:12
Anderes Feld für GMENU alt Text geändert am  13-Jun-2008 13:55:51
Lightbox ohne Extension einbinden geändert am  13-Jun-2008 13:46:21
Menü erstellen mit Daten aus anderen Tabellen als pages V2 geändert am  24-Mär-2008 13:02:25
Login geändert am  17-Mär-2008 12:18:29
Forum geändert am  17-Mär-2008 10:07:40
Wer sind wir? geändert am  26-Dez-2007 16:06:55
Menu als unnested lists (iphone navigation) geändert am  29-Okt-2007 15:05:47
If Bedingungen mit UND und ODER Operator... geändert am  16-Okt-2007 19:04:17
UserFunc um ein Problem mit HMENU Typ "special=updated" zu umgehen geändert am  16-Okt-2007 18:58:28
English
Suche: