[TYPO3-german] Teaserseite mit vier unterschiedlichen Teaserdarstellungen

Peter Russ peter.russ at 4many.net
Thu Sep 21 22:03:36 CEST 2006


Christoph Wiemers schrieb:
[...]
> 
> Ok, aber ich verstehe nicht ganz wie ich das in einer Teaserseite
> unterbringe. Bezieht sich die Layoutdarstellung 1, 2. 3  .. nicht auf
> die Darstellung der Seite selbst?
> 
> Gruß Christoph

Ok der Reihe nach.

Einfache Version:
-----------------
Ideal zum Teasern geeignet ist der Seitentyp "Erweitert" (doktype 2, s.u):
in der _Inhaltsangabe_ kann der individuelle "Teasertext" erfasst 
werden. Ein individuelles Bild wird in _Dateien_ hinterlegt.

Das geeignet Element in Typoscript, um aus den Seiten nun die 
Teaserzusammenstellung zu erstellen, ist "CONTENT"
also

<code>
temp.teaserPage=CONTENT
</code>

Da wir den Inhalt der Seiten anteaser wollen, müssen wir auf die Tabelle 
"pages" zugreifen, womit wir
<code>
temp.teaserPage=CONTENT
temp.pages{
	table=pages
}
</code>

erhalten.

Nun gilt es die Seiten zu bestimmen, die in einem Verzeichnis vorhanden 
sind. Nehmen wir an dein Verzeichnis (parent) hat die _id=12_ und wir 
wollen nur die Seiten vom Typ "Erweitert" (doktype 2, s.o.)

<code>
temp.teaserPage=CONTENT
temp.pages{
	table=pages
	select{
		pidInList=12
		where=doktype in (2)
	}
}
</code>

Damit erhälst Du alle Seiten die direkte Kinder (childs) von 
Seite/Verzeichnis mit der id=12 sind.

Nun gilt es festzulegen, wie das Ergebnis dargestellt werden soll. Dazu 
bietet das Objekt CONTENT die Eigenschaft renderObj. Diese werden wir 
wie im Posting zuvor als Fallunterscheidung definiern, wo bei als 
_Unterscheider_ (key) die von Typo3 generierte Variable 
"{cObj:parentRecordNumber}", einem fortlaufenden Rekord-Zähler, 
verwenden. Dabei sollen die 1 & 3 Record mit Text und Bild, Record 2 
ohne Bild und alle Weiteren (default) nur mit Überschrift gerendert 
werden. Weiter lassen wir auf die Seiten direkt verlinken.
Etwaigen HTML-Code entfernen wir aus der Inhaltsangabe, maximal 200 
Zeichen sollen verwendet werden, der Umburch soll an einer Leerstelle 
erfolgen und wir wollen '...' als Anzeige, dass der Text weitergeht.

Wir erhalten damit
<code>
temp.teaserPage=CONTENT
temp.pages{
	table=pages
	select{
		pidInList=12
		where=doktype in (2)
	}
	renderObj=CASE
	renderObj{
		key={cObj:parentRecordNumber}
		#Alle Records > 3
		default=COA
		default{
			10=TEXT
			10{
				field=title
				wrap=<h1>|</h1>
			}
			stdWrap.typolink.parameter.field=uid
		}
		#Erste Record. Wir sparen uns Arbeit und kopieren
		#den Inhalt von default, dann müssen wir nur die
		#Änderungen hinzufügen
		1 < .default
		1{
			20=TEXT
			20{
				field=abstract
				crop=200|...|1
				stripHtml=1
				wrap=<div class="teaser-text">|</div>
			}
			30=IMAGE
			30{
				file.import=uploads/media/
				file.import.listNum=0
				file.import.field=media
				wrap=<div class="teaser-img">|</div>
			}
		}
		#3. Record soll wie 1. gerendert werden
		3 < .1
		#2. Record soll wie 1. aber ohne Bild rendert werden
		2 < .1
		2.30 >
	}
}
</code>

Nun klar?

Aufwendiger:
------------
Nehmen wir nun an, du möchstest statt den Inhaltsangaben des Seitentyps 
"Erweitert" auf das jeweils 1. Inhaltselement einer Seite zugreifen. 
Hier wird vorausgesetzt, dass diese vom Typ "Text mit Bild" sind, denn 
sonst haben wir keine Bilder zum darstellen ;-)

Die Herausforderung besteht nun darin, zunächst alle Seiten (childs) zur 
Hauptseite (parent) zu finden. Dies erreichen wir mit:
<code>
temp.pidInList=CONTENT
temp.pidInList{
	table=pages
	select{
		pidInList=12
	}
	renderObj=TEXT
	renderObj{
		field=uid
		wrap=|,
	}
}
</code>

Diese Komma-separierte Liste setzen wir nun in unsere Abfrage ein. Da 
wir nun auf die Inhaltelemente zugreifen, verwenden wir die Tabelle 
tt_content, der Inhaltstype soll "Bild mit Text sein", wir holen nur das 
erste Element aus der Spalte "normal"
Also:
<code>
temp.teaserPage=CONTENT
temp.pages{
	table=tt_content
	select{
		pidInList<temp.pidInList
		selectField=uid,pid,header,bodytext,image,min(sorting)
		where=colPos=0 and ctype='textpic'
		groupBy=pid
		
	}
}
</code>

Das min(sorting) sorgt dafür, dass wir die 1. Inhaltselment einer Seite 
bekommen, dass vom Typ "Bild mit Text" ist.

Das Renderobjekt klappt jetzt allein?


Gruss. Peter.

-- 
Fiat lux!
Docendo discimus.
_____________________________
4Many® Services
openBC: http://www.openbc.com/go/invuid/Peter_Russ



More information about the TYPO3-german mailing list