RECORDS mit eigenem wrap für jeden RECORD. Eigene Klasse für jedes Inhaltselement. RECORD Count.

Das war mal eine Herausforderung:

  • Die Inhaltselemente einer TemplaVoilà-Spalte sollten per Content-Slide an Unterseiten vererbt werden – allerdings nur, falls die Spalte auf den Unterseiten nicht eigene Inhaltselemente enthält
  • Die einzelnen Content-Elemente sollten dann mit eigenen Klassen gewrappt werden, die eine Nummerierung für jedes Element enthält
  • Das erste Element sollte zusätzlich die Klasse .first bekommen und das letzte Element .last
  • Wenn es nur ein einziges Element gibt, dann sollte es beide Klassen .first und .last bekommen

Das größte Problem war die doppelte Klasse „.first .last“ wenn nur ein einziges Element existiert. Die Lösung bestand am Ende aus der Kombination von {register:SPLIT_COUNT} und einer if-Klausel.

Nach diesen Begriffen hatte ich die letzten 2 Stunden nach einer Lösung gesucht: RECORDS totalRecords numRecords. Get total num records typoscript. Wrap um einzelne Content-Elemente. cObj cObjNum records numRows split. RECORDS Anzahl Typoscript ermitteln. records typoscript source. listnum typoscript. wrap for first last item typo3. optionsplit mit last und first. Inhaltselemente nummerieren. Erstes und letztes Inhaltselement wrappen. cObj parentrecord total. Access currentRecordTotal Typoscript. Wrap last item of record Typoscript. Wrap um letztes Content-Element. equals cObject cObjNum. cObject cObjNum split. Num RECORDS with last item. Typoscript Zähler. Anzahl Datensätze mit TypoScript abfragen. Records Anzahl Typoscript. Get total records typoscript.

lib.sidebar_global = RECORDS
lib.sidebar_global {
tables = tt_content
dontCheckPid = 1
source {
postUserFunc = tx_kbtvcontslide_pi1->main
postUserFunc.field = field_side_global
if.value.cObject = TEXT
if.value.cObject {
postUserFunc = user_functions->get_tv_field
postUserFunc.flex_data = field_show_side_global
}
if.equals = 0
if.negate = 1
}
 
conf.tt_content.stdWrap.wrap = |---item---
 
stdWrap.split {
token = ---item---
cObjNum = 1 |*| 2 |*| 99 || 0
default.current = 1
default.wrap = |
1.current = 1
1.wrap = <div class="sidebar-item first sidebar-item-{register:SPLIT_COUNT}">|</div>
1.wrap.insertData = 1
2.current = 1
2.wrap = <div class="sidebar-item sidebar-item-{register:SPLIT_COUNT}">|</div>
2.wrap.insertData = 1
99.current = 1
99.wrap = <div class="sidebar-item last sidebar-item-{register:SPLIT_COUNT}">|</div>
99.wrap.insertData = 1
99.wrap.override = <div class="sidebar-item first last sidebar-item-{register:SPLIT_COUNT}">|</div>
99.wrap.override.if {
value = 0
equals.data = register:SPLIT_COUNT
}
}
 
 
}

Noch mal in abgespeckter Version ohne das Content-Slide:

lib.sidebar_global = RECORDS
lib.sidebar_global {
tables = tt_content
dontCheckPid = 1
 
# Hier kommen die UIDs der Inhaltselemente rein, die gerendert werden sollen
source = 122,172,194
 
conf.tt_content.stdWrap.wrap = |---item---
 
stdWrap.split {
token = ---item---
cObjNum = 1 |*| 2 |*| 99 || 0
default.current = 1
default.wrap = |
1.current = 1
1.wrap = <div class="sidebar-item first sidebar-item-{register:SPLIT_COUNT}">|</div>
1.wrap.insertData = 1
2.current = 1
2.wrap = <div class="sidebar-item sidebar-item-{register:SPLIT_COUNT}">|</div>
2.wrap.insertData = 1
99.current = 1
99.wrap = <div class="sidebar-item last sidebar-item-{register:SPLIT_COUNT}">|</div>
99.wrap.insertData = 1
99.wrap.override = <div class="sidebar-item first last sidebar-item-{register:SPLIT_COUNT}">|</div>
99.wrap.override.if {
value = 0
equals.data = register:SPLIT_COUNT
}
}
 
 
}