impressum
Oliver Weiß - Typo3 Programmierung Consulting

Internet für alle

Typo3 Extensions

TypoScript Programmierung 

Typo3 Consulting

Oliver Weiß
Rigaer Straße 15
10247 Berlin
030-41 725 718

Valid XHTML 1.0 Transitional Valid CSS!
© 2006-2011 Oliver Weiß

Inhaltselemente nummerieren

Problem: Jedes Inhaltselement auf einer Seite soll mit einer eigenen id versehen und mit einem div-Container gewrappt werden, das erste also mit <div id="element_1">, das zweite mit <div id="element_2"> usw.

Lösung:

Zunächst muss jedes Inhaltselement ein eigenes Render Objekt bekommen:

temp.content_start < styles.content.get
temp.content_start {
    renderObj < tt_content
    renderObj.stdWrap.wrap = <div id="element_1">|</div>
}

Damit schafft man es zunächst einmal, dass jedes Element einen wrap bekommt, aber jede id ist hier gleich.

Um eine Nummerierung hin zu bekommen, ist der Umweg über LOAD_REGISTER nötig. Die Idee ist, dass nach jedem rendern eines Objektes der Wert im REGISTER ausgelesen, um 1 erhöht wird und dann der Wrap stattfindet:

temp.content_start < styles.content.get
temp.content_start {
    renderObj < tt_content
    renderObj.stdWrap.preCObject = LOAD_REGISTER
        renderObj.stdWrap.preCObject{
                   Counter.cObject = TEXT
                   Counter.cObject.data = register:Counter
                   Counter.cObject.wrap = |+1
                   Counter.prioriCalc = intval
        }
    renderObj.stdWrap.dataWrap = <div id="element_{register:Counter}">|</div>
}

Wir haben den Wert im Register "Counter" genannt, er kann auch ganz anders heißen. Dieser Wert wird bei jedem rendern eines Elements um 1 erhöht. prioriCalc ist wichtig, damit stdWrap den wrap als Rechenprozess verarbeitet und nicht als Text. Anschließend wird der Wert Counter aus dem Register ausgelesen und in den wrap eingefügt.

Gerade und ungerade Zeilen in einem Content Element unterschiedlich formatieren

Im renderObj des Content Objektes als erstes ein Register definieren:

1 = LOAD_REGISTER
1.rowClass.cObject = TEXT
1.rowClass.cObject.dataWrap = {REGISTER:rowClass}+1
1.rowClass.override = 1
1.rowClass.override.if.isLessThan = 1
1.rowClass.override.if.value.data = REGISTER:rowClass
1.rowClass.prioriCalc = intval

Anschließend an der entsprechenden Stelle das Register rowClass einsetzen. Es ist entweder 1 bei ungeraden oder 2 bei geraden Zeilen:

20 = TEXT
20.value = <tr class="row_{REGISTER:rowClass}">
20.insertData = 1

Save as PDF