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

Freitag, 15. Juni 2012

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
    }
  }
 
 
}