Vorheriger Artikel Nächster Artikel

Inhalt einer Seite und ihrer Unterseiten zusammenfassen: TYPO3 Kochbuch: Proberezept

Aus dem
t3n Magazin Nr. 4

06/2006 - 08/2006

 

Problem

Sie möchten die Inhalte bestimmter Seiten und ihrer Unterseiten in einer einzigen Ausgabeseite zusammenfassen. Damit könnten Sie z.B. dem Besucher der Seiten eine kompakte Druckversion anbieten, ohne dass dieser sich dazu auf jede einzelne Unterseite bewegen muss, um dort einen separaten Ausdruck vorzunehmen.

Lösung

Verwenden Sie das TypoScript-Element CONTENT und verschachteln Sie es über mehrere Ebenen, indem Sie dem entsprechenden renderObj jeweils ein weiteres CONTENT-Element zuweisen. Das übergeordnete CONTENT-Element liefert dabei die UID der Seiten, von denen jeweils weitere Unterseiten und/oder deren Inhaltselemente verwendet werden.

TYPOSCRIPT - PAGE SETUP 

temp.kumulierterInhalt = COA
temp.kumulierterInhalt {
	10 = TEXT
	10.field = title
	10.wrap = <h1>|</h1>
	20 = CONTENT
	20 {
		table = tt_content
		select {
			orderBy = sorting
		}
	}
	30 = CONTENT
	30 {
		table = pages
		select {
			orderBy = sorting
		}
		renderObj = COA
		renderObj {
			10 = TEXT
			10.field = title
			10.wrap = <h2>|</h2>
			20 = CONTENT
			20 {
				table = tt_content
				select {
					pidInList.field = uid
					orderBy = sorting
				}
			}
		}
	}
}

Listing 1

Diskussion

Eines der wichtigsten TypoScript-Elemente ist das CONTENT-Element, mit dem Sie Inhalte aus verschiedenen Tabellen der Datenbank auslesen und anschließend für die Ausgabe formatieren können. CONTENT verfügt dabei neben wrap und zusätzlichen stdWrap-Funktionen über drei Hauptbereiche, mit deren Hilfe Sie exakt festlegen können, welche Inhalte verwendet werden und aus welcher Tabelle diese stammen sollen.

Mit Hilfe der Eigenschaft table legen Sie zunächst die Tabelle fest, aus der die jeweiligen Inhalte geholt werden sollen. Erlaubt sind dabei die Tabelle pages sowie alle Tabellen, deren Tabellennamen mit einem der folgenden Präfixe versehen ist:

  • tt_
  • tx_
  • ttx_
  • fe_
  • user_

Mit Hilfe der Eigenschaft select konfigurieren Sie die eigentliche SQL-Abfrage. select verfügt hierzu über weitere Parameter, von denen wir in diesem Rezept nur pidInList und orderBy benötigen.

Mit Hilfe von pidInList können Sie einen oder mehrere UID-Werte in einer kommaseparierten Liste angeben, um die Seiten, von denen der Inhalt geholt werden soll, festzulegen. Da pidInList über stdWrap-Eigenschaften verfügt, ist es sogar möglich, diese kommaseparierte Liste mit Hilfe von TypoScript dynamisch zu erzeugen.

TYPOSCRIPT - PAGE SETUP 

pidInList.cObject = COA
pidInList.cObject {
	10 = TEXT
	10.field = uid
	20 = TEXT
	20.dataWrap = ,{GPvar:meineURLParameter}
}

Listing 2

Der Parameter orderBy wiederum legt das Sortierkriterium fest. In unserem Beispiel wird nach dem Wert des Felds sorting sortiert. Das bedeutet, dass die Ausgabe exakt in der Reihenfolge stattfindet, in der die Inhalte im Backend aufgelistet werden.

Mit Hilfe von renderObj legen Sie die Formatierung der Ausgabe fest. Erlaubt sind hier sämtliche TypoScript-cObjects. In der Regel empfiehlt es sich, hier mit einem COA zu arbeiten, weil Sie damit sicherstellen, dass Sie später notfalls zusätzliche Werte und Felder zur bestehenden Ausgabe hinzufügen können. Wenn Sie kein spezielles renderObj angeben, wird die Default-Einstellung für die gewählte Tabelle verwendet, wie sie z.B. innerhalb von CSS-styled-content festgelegt wird.

In unserem Beispiel wird zuerst eine Überschrift erzeugt, die den Titel der aktuellen Seite ausgibt. Danach folgt ein erstes CONTENT-Element, das die Inhaltselemente der aktuellen Seite aus der Tabelle tt_content ausliest. Da, wie bereits erwähnt, pid-InList als Default die aktuelle Seite verwendet, wird in diesem Fall keine explizite Angabe benötigt.

Bis hierhin entspricht die Ausgabe der üblichen Vorgehensweise, wie sie bei CSSstyled-content zum Einsatz kommt. Doch nun kommen wir zum interessanten Teil des Beispiels.

Wie bereits erwähnt, können Sie mit Hilfe von CONTENT auch auf andere Tabellen als tt_content selbst zugreifen. Da die Aufgabe lautete, die Inhalte der Unterseiten mit auszugeben, müssen Sie also zunächst auf die Tabelle pages zugreifen. Auch hier können Sie auf die Angabe von pidInList zunächst verzichten, weil nur Unterseiten der aktuellen Seite verwendet werden sollen. Sortiert wird ebenfalls nach dem Wert des Felds sorting.

An dieser Stelle kommt nun erstmalig ein renderObj zum Einsatz, damit Sie erst auf den Titel der ausgewählten Seite und dann auf deren Inhalt zugreifen können. Das verwendete Element ist ein COA, das im Bereich 10 mit einem einfachen TEXT-Element versehen wird, mit dessen Hilfe das Feld title in einer Überschrift zweiten Grads verpackt wird. Der eigentliche Trick dieses Rezepts liegt im Bereich 20 des COA, denn hier wird ein weiteres CONTENT-Element verschachtelt. Weil in diesem Fall die UID der jeweiligen Unterseite und nicht etwa die der aktuellen Seite als PID verwendet werden soll, wird pidInList mit Hilfe von field = uid gefüllt.

Mit diesem Trick sorgen Sie dafür, dass die Inhalte der Reihe nach aus den Unterseiten der aktuellen Seite ausgelesen werden und als Überschrift den Titel der jeweiligen Unterseite erhalten.

Abschließend zeigen wir Ihnen noch ein Beispiel für eine tiefer gehende Verschachtelung, die zwei weitere Unterebenen in die Ausgabe mit einbezieht.

Aus Gründen des Komforts haben wir in diesem Fall ein weiteres temp-Objekt namens unterseiten angelegt, das Sie mehrfach wiederverwenden können, indem Sie es an die richtige Stelle kopieren.

TYPOSCRIPT - PAGE SETUP 

temp.unterseiten = CONTENT
temp.unterseiten {
	table = pages
	select {
		pidInList.field = uid
		orderBy = sorting
	}
	renderObj = COA
	renderObj {
		10 = TEXT
		10.field = title
		10.wrap = <h2>|</h2>
		20 = CONTENT
		20 {
			table = tt_content
			select {
				pidInList.field = uid
				orderBy = sorting
			}
		}
	}
}

temp.kumulierterInhalt = COA
temp.kumulierterInhalt {
	10 = TEXT
	10.field = title
	10.wrap = <h1>|</h1>
	20 = CONTENT
	20 {
		table = tt_content
		select {
			orderBy = sorting
		}
	}
	30 < temp.unterseiten
	30.renderObj {
		30 < temp.unterseiten
		30.renderObj {
			10.wrap = <h3>|<h3>
			30 < temp.unterseiten
			30.renderObj {
				10.wrap = <h4>|<h4>
			}
		}
	}
}

Listing 3

Durch den Einsatz des zusätzlichen temp-Objekts können Sie beliebig viele Ebenen hinzufügen, ohne dabei jedes Mal den vollständigen Code eingeben zu müssen. Der Inhalt von temp.unterseiten wird einfach in den Bereich 30 des übergeordneten COA kopiert. Danach müssen Sie ab der zweiten Ebene lediglich den Bereich 10 des renderObj modifizieren, damit die Überschriften den zur entsprechenden Ebene passenden Grad bekommen.

 

Abonniere jetzt t3n-News über WhatsApp und bleib mobil auf dem Laufenden!
t3n-News via WhatsApp!
Vorheriger Artikel Zurück zur Startseite Nächster Artikel
2 Antworten
  1. von Marc am 05.03.2011 (23:53 Uhr)

    Hallo,

    das Skript funktioniert super, aber wie kann ich den Ausgangspunkt bestimmen? Vor allem bei Listing 3? Ich möchte die Zusammenfassungs in der Baumstruktur an einer losgelösten Stelle haben.

    grüße

    Marc

    Antworten Teilen
  2. von PeterN am 15.04.2011 (08:31 Uhr)

    Welche daten ausgelesen werden wird hier jeweils hauptsächlich über das Wert 'pidInList' gesteuert.

    #pages

    # pidInList.field = uid
    # alle Untesreiten der aktuellen Seite

    # pidInList = 23
    # alle Unterseiten von seite 23

    # pidInList hat .stdWrap und bietet diverse alternative Möglichkeiten den Wert festzulegen

    Antworten Teilen
Deine Meinung

Bitte melde dich an!

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden

Aktuelles aus dem Bereich TYPO3
TYPO3 CMS 7 LTS: Das kann die neue Version des Enterprise-CMS
TYPO3 CMS 7 LTS: Das kann die neue Version des Enterprise-CMS

Heute ist nach einigen Sprint-Releases mit Version 7.6 endlich die neue Long-Term-Support-Version von TYPO3 CMS veröffentlicht worden. Was der neue Release an Neuerungen mitbringt, zeigen wir euch … » weiterlesen

Das sind die Gewinner der TYPO3-Awards: Die besten Websites der vergangenen zwei Jahre im Überblick
Das sind die Gewinner der TYPO3-Awards: Die besten Websites der vergangenen zwei Jahre im Überblick

Am gestrigen Abend wurden die TYPO3-Awards in Amsterdam verliehen. Wir zeigen euch die Gewinner, von deren Websites ihr euch bestimmt noch Inspiration holen könnt. » weiterlesen

TYPO3 CMS 7.5: Das ist neu
TYPO3 CMS 7.5: Das ist neu

Heute wurde mit TYPO3 CMS 7.5 der letzte Sprint-Release vor dem Long-Term-Support-Release (LTS) veröffentlicht. Die neue Version bringt unter anderem Unterstützung für die einfache Einbindung von … » weiterlesen

Alle Hefte Jetzt abonnieren – für nur 35 €

Kennst Du schon unser t3n Magazin?