Hallo,
ich würde auf einer meiner Seiten gerne eine Timeline integrieren. Ich habe die Jahreszahlen als Seiten angelegt, kann aber den Seiteninhalt nicht auslesen.
Der für die Timeline benötigte HTML-Code sieht folgendermaßen aus:
<div class="container">
<div class="timeslot">
<span>2009</span>
<p>Text zu 2009... </p>
</div>
<div class="timeslot even">
<span>2008</span>
<p>Text zu 2008... </p>
</div>
etc..
Wie gesagt, die Jahreszahlen sind bei mir als Seiten hinterlegt und der dazugehörige Text jeweils als Inhalt in der rechten Spalte.
Um den Code zu erzeugen, wollte ich ein Menü erstellen und "wrap" verwenden, um die html-Tags einzufügen. Hier meine Lösung, die ich als Ext.-Template auf einer Seite hinterlegt habe:
page.10.marks.TIMELINE = CONTENT
page.10.marks.TIMELINE{
table=tt_content
select.where=colPos=2
renderObj=COA
renderObj{
5 = HMENU
5{
entryLevel = 2
special = directory
special.value = 8
1 = TMENU
1{
wrap = <div class="time_container">|</div>
NO {
wrapItemAndSub = |*| <div class="timeslot even"><span>|</span><p>{field = bodytext}</p></div> || <div class="timeslot"><span>|</span><p> {field = bodytext}</p></div> |*| <div class="timeslot even"><span>|</span><p> {field = bodytext}</p></div>
}
}
}
Mein Problem ist, dass der Inhalt aus der rechten Spalte nicht eingefügt wird, sondern lediglich „{field:bodytext}“ ausgegeben wird. Könnte mir eventuell jemand sagen, wie ich den Inhalt richtig referenzieren kann?
Vielleicht hab ich auch einen total falschen Ansatz. Nach tagelangem Probieren gebe ich mich geschlagen.
Danke schon mal für jede Hilfe 🙂
Der Ansatz ist OK, nur die "Feinheiten" noch nicht:
Hinweis: In Deinem TS-Beispiel steht {field = bodytext}, dass heißt natürlich {field:bodytext}
Und Du bekommst natürlich auch nur die Daten in den geschweiften Klammern interpretiert, wenn Du das explizit anforderst. Da wrapItemAndSub stdWrap-Eigenschaften hat, z.B. mittels "insertData = 1"
In Deinem Fall also (Code auf's Problem gekürzt):
NO.wrapItemAndSub = <div><span>|</span><p>{field:bodytext}</p></div>
NO.wrapItemAndSub.insertData = 1
Ich hoffe, das hilft Dir!
Ja, klar: {field:bodytext}. Das mir das nicht aufgefallen ist! #angry# Danke!
Jetzt wird "{field:bodytext}" nicht mehr ausgegeben, aber leider auch der Content immer noch nicht. Die Stelle bleibt leer.
Du hast "z.B. mittels insertData = 1" geschrieben. Gibt es noch eine andere Möglichkeit, die ich ausprobieren könnte?
Wenn da schonmal nichts mehr steht, ist das ein Zeichen dafür, das versucht wurde den Platzhalter zu ersetzen. Deshalb brauchst Du nichts anders auszuprobieren (dataWrap, cObject ...)
Inhalte hast Du schon in "bodytext" eingegeben, der ausgegeben werden kann? Entschuldige die Frage, sowas passiert mir manchmal...
Versuch' erstmal ein Feld auszugeben, was auf jeden Fall vorhanden ist, z.B. {field:uid}
Die Jahreszahl, die Du als Überschrift eingegeben hast, wird aber bereits ausgegeben, oder?
Ja, die Seitenzahlen werden ausgegeben. Auf z.B. "{field:uid}" reagiert es auch.
Ich habe jeweils in der linken, mittleren und rechten Spalte einen Inhalt, weshalb es für eine Seite mehrere bodytexte gibt. Könnte das Problem eventuell sein, dass Typo3 nicht weiß, welches bodytext-Feld es nehmen soll und deshalb keins ausgibt?
Entschuldigung, ich hatte ein Brett vorm Kopf. Ich habe in Deinem grundsätzliche Ansatz übersehen, dass Deine Titel aus der Seite, der bodytext aber natürlich aus tt_content kommt.
Also nochmal wiederholt:
1. Du willst ein Menü aus Seitentiteln erzeugen (2010,2011,2012,..)
2. Für jeden Menüpunkt das erste Inhaltselement aus der rechten Spalte auslesen und an den Seitentitel anhängen.
Jetzt hast Du meinen Ehrgeiz entfacht, deshalb hier mal meine geteste Version des TypoScripts:
page.10.marks.TIMELINE = HMENU
page.10.marks.TIMELINE {
## Menü aus Seiten erzeugen
special = directory
special.value = 8
## Brauchst Du das?
##entryLevel = 2
1 = TMENU
1 {
wrap = <div class="time_container">|</div>
NO {
## Odd/Even wrap
wrapItemAndSub = |*|<div class="timeslot odd">|</div> || <div class="timeslot even">|</div>|*|
## wrap nur für den Seitentitel und Link
stdWrap.wrap = <span>|</span>
## HINTER dem Seitentitel und Link
## deshalb stdWrap2
stdWrap2.append = CONTENT
stdWrap2.append {
table = tt_content
select.where = colPos = 2
## Nur das erste Element
select.max = 1
## Content aus der aktuellen Seite holen
## uid bezieht sich auf die aktuelle Seite des Menüs
select.pidInList.field = uid
renderObj = COA
renderObj {
10 = TEXT
10.field = bodytext
10.wrap = <p>|</p>
}
}
}
}
}
Schau' mal ob das jetzt eher passt 😃
Hey, super! Genau das habe ich versucht.
Na, der Code sieht ja nochmal ganz anders aus..da war ich doch noch sehr weit von der Lösung entfernt..
Jetzt sind es nur noch Kleinigkeiten, warum z.B. die Farben aus css übernommen werden, aber "text-decoration:none" nicht. Aber da komm ich auch noch dahinter 🙂
Vielen, vielen Dank für deine Hilfe!