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

 




Comments


Klaus, 23-04-08 07:11:
Hallo,
danke fuer den Artikel.
Eine Frage: Sehe ich es richtig, dass dies NICHT bei Verwendung von TemplaVoila bzw. FCEs funktioniert?

Gibt es dafuer evtl. Loesungen?

mfg. klaus.
Michael, 12-09-08 19:52:
Hi,
Das Beispiel ist prima, aber einen kleinen Schönheitsfehler hat es leider trotzdem. Die Seiten die mit dem Seitentyp "Abstand" erstellt worden, werden auch angezeigt! Das macht nicht wirklich Sinn da dieses ja keine Seiten sind. Ich versuche schon ne zeitlang eine Lösung zu finden, aber leider bin ich noch nicht zu einer Lösung gekommen :(
Grüsse, michael
Seniore T, 11-05-09 17:57:
Tausend Dank! Konnte ich gut für alternierende Hintergrundfarben eine Tabellenabfrage ohne css_styled_content gebrauchen!
Michael, 12-04-10 21:23:
Hi, super vielen Dank für das tolle Skript. Ich habe nur ein Problem mit dem Anzeigen eines Bildes. Der Code dafür steht ja oben, aber woher nimmt der das Bild. Wenn ich unter den Seiteneigenschaften unter Ressources ein Bild hochlade, passiert jedenfalls nichts. Wäre super, wenn mir jemand helfen kann, vielen Dank!

Gruß

Michael
Sebastian, 14-04-10 20:42:
Hey du,

Crop finde ich ja ganz nett, aber wenn ich nen Crop anwende verliere ich alle Zeilenumbrüche, hast du vielleicht ne Möglichkeit die dennoch zu benutzen?

Sebastian

Add comment

* - required field

*



*
*

Top 10 Updates

Login geändert am  14-Aug-2010 13:50:17
Schöne Schriften mit Google Font API geändert am  20-May-2010 16:36:59
TS basierte Searchbox für Indexed Search geändert am  18-May-2010 18:26:54
TYPO3 SEO geändert am  30-Apr-2010 09:43:20
Suchmaschinenfreundliche grafische Überschriften in TYPO3 geändert am  30-Apr-2010 09:33:56
Erstellen eines einfachen Infocenters mit TYPO3  geändert am  17-Nov-2009 12:11:22
Funktionierendes Section Menu mit TemplaVoila geändert am  05-May-2009 12:42:40
"Nicht im Menü" in Sitemap anzeigen geändert am  05-May-2009 12:12:24
Implementation des DHTML Menüs von brainjar.com  geändert am  01-Feb-2009 14:01:36
Beispiel DHTML Menü geändert am  01-Feb-2009 13:47:38

Latest comments

01-Sep-2010 20:38:32
Ben Heuwing schrieb: Damit die aktuelle Seite nicht verlinkt wird, wie bei normalen Menüs den MENUITEMSTATE CUR...
Klickpfad / Rootline Menu / Breadcrumb Menu
31-Aug-2010 17:16:13
Peter schrieb: Hallo Zusammen, ich hätte eine Frage: Ich würde gerne den Seitentitel der ersten Ebene oberhalb...
Seitentitel von übergeordneter Seite ausgeben
26-Aug-2010 21:32:42
Mo schrieb: Aktuell:...
Mehrere Domains in einer Typo3 Installation verwalten
English
Suche: