Anzeige
Anzeige
Software
Artikel merken

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

  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.

5 Min. Lesezeit
Anzeige
Anzeige

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

Anzeige
Anzeige

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:

Anzeige
Anzeige
  • 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.

Anzeige
Anzeige

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.

Anzeige
Anzeige

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.

Anzeige
Anzeige

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.

Anzeige
Anzeige

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.

Anzeige
Anzeige

 

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
2 Kommentare
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Marc

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
PeterN

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

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige