[TYPO3-german] [Gelöst - wirklich] Element-Gruppen wrappen in eigenem Content mit TS

Tom Arnold t3list at bnt.de
Wed Mar 30 16:01:06 CEST 2011


Eine lange Reise durch die unruhigen Wasser des Typoscript findet ein 
Ende: ES GEHT!!! :-)

Der letze Baustein, der nicht wollte, ist nun auch geknackt - die 
Überprüfung, ob das letzte Element meines Records nicht vielleicht auch 
das erste einer neuen Gruppe ist:

# override fuer das letzte element der records
stdWrap.outerWrap.override.cObject = COA
stdWrap.outerWrap.override.cObject {
	if {
           # ist es das letzte?
           value.data = cObj:parentRecordNumber
           equals.data = register:totalRecords
         }

         10 = TEXT
         10 {
	 if {
             # ist es das erste?
             value = 1
             equals.cObject = TEXT
             equals.cObject {
               data = cObj:parentRecordNumber
               wrap = |%4
             }
             equals.prioriCalc = 1
           }
	# wrap mit debug ausgabe
           insertData = 1
           value = <div class="group">|<!-- 
{cObj:parentRecordNumber}/{register:totalRecords} .group .first .last 
--></div>
         }

	20 = TEXT
	20 {
           if {
             # ist es das nicht das erste?
             value = 1
             equals.cObject = TEXT
             equals.cObject {
               data = cObj:parentRecordNumber
               wrap = |%4
             }
             equals.prioriCalc = 1
             negate = 1
           }
	# wrap mit debug ausgabe
           insertData = 1
           value = |<!-- 
{cObj:parentRecordNumber}/{register:totalRecords} .group .last --></div>
         }
}

Boah ey. Seit fast einer Woche jeden Tag ein paar Stunden recherchiert 
und gebastelt, wie soll man denn das bitte jemals einem Kunden verkaufen 
können?
Typoscript, ich hassliebe Dich.

Gruss
Tom



Am 29.03.11 15:19, schrieb Tom Arnold:
> *push* hat niemand eine Idee oder einen Ansatz?
> :-/
>
> Ich habe zwischenzeitlich Versucht, den stdWarp.outerWrap.override in
> ein COA zu verwandeln und
> a) den gesamten override mit if nur auszugeben, wenn es das letzte
> Element ist ( value.data = cObj:parentRecordNumber equals.data =
> register:totalRecords ), das klappt auch soweit
> b) dann die 10 und 20 des COAs jeweils wieder mit if abzufragen, aber da
> geht irgendwas schief:
>
> stdWrap.outerWrap.override.cObject = COA
> stdWrap.outerWrap.override.cObject {
> if.value.data = cObj:parentRecordNumber
> if.equals.data = register:totalRecords
> # ist das erste nach dem modulo und das letzte element, eine ganzes div
> # muss drumrum
> 10 = TEXT
> 10.value = <div class="group last first">|<!-- .group.last.first --></div>
> 10.if {
> value.data = cObj:parentRecordNumber
> wrap = |%4
> prioriCalc = 1
> equals = 1
> }
> # das letzte element, aber nicht das erste, also div nur zumachen
> 20 = TEXT
> 20. value = |<!-- .group.last --></div>
> 20.if {
> value.data = cObj:parentRecordNumber
> wrap = |%4
> prioriCalc = 1
> equals = 1
> negate = 1
> }
> }
>
> es wird immer die 20 ausgegeben, niemals die 10. :(
>
> Viele Grüße
> Tom
>
> Am 28.03.11 12:41, schrieb Tom Arnold:
>> So, weiter im Selbstgespräch.
>>
>> Die Anzahl der Gesamtrecords habe ich nun auch, mit LOAD_REGISTER und
>> numRows.
>>
>> Jetzt gibt es noch eine letzte Sache:
>>
>> Wenn der letzte Record gleichzeitig der erste Record nach dem Modulo
>> ist, dann wird durch die Überprüfung auf "es ist das letzte", das
>> startende Group-Div nicht erzeugt... argh.
>>
>> Ich brauche also *noch* eine Überprüfung.
>>
>> Im Moment wird innerhalb des CASE des outerWraps gecheckt, ob es der
>> erste Record (oder der erste nach dem der Modulo=0 ist) ist, oder der
>> Record, bei dem der Modulo=0 ist.
>>
>> Dann wird im Override des Outerwrap geschaut, ob es der letzte Record
>> ist.
>>
>> Hier müsste jetzt noch die Überprüfung rein, ob es der erste Record
>> (nach dem Modulo) UND der letzte Record ist - und wieder stehe ich vor
>> einem Rätsel.
>>
>> temp.gruppen = CONTENT
>> temp.gruppen {
>> (selectkrams...)
>> renderObj = COA
>> renderObj {
>> stdWrap.dataWrap =
>> <div class="item-{cObj:parentRecordNumber}">|</div>
>>
>> 1 = LOAD_REGISTER
>> 1.totalRecords = TEXT
>> 1.totalRecords.numRows < temp.gruppen
>>
>> stdWrap.outerWrap.cObject = COA
>> stdWrap.outerWrap.cObject {
>> 10 = CASE
>> 10.key.cObject = TEXT
>> 10.key.cObject.data = cObj:parentRecordNumber
>> # 2, Berechnung per Modulo
>> 10.key.cObject.wrap = |%4
>> 10.key.prioriCalc = intval
>> # default: nix wrappen
>> 10.default = TEXT
>> 10.default.value = |
>> # erstes element: groupwrap oeffnen:
>> 10.1 = TEXT
>> 10.1.value = <div class="group">|
>> # modulo = 0: groupwrap schliessen:
>> 10.0 = TEXT
>> 10.0.value = |<!-- .group --></div>
>> }
>> stdWrap.outerWrap.override.cObject = COA
>> stdWrap.outerWrap.override.cObject {
>> if.value.data = cObj:parentRecordNumber
>>
>> # wie bekomme ich hier die numRows hin?
>> if.equals.data = register:totalRecords
>>
>> 10 = TEXT
>> 10.value = |<!-- .group .last --></div>
>> }
>> 10 = TEXT
>> 10.value = (Hier der Inhalt)
>> }
>> }
>>
>> Viele Grüsse
>> Tom
>>
>>
>>
>>
>> Am 27.03.11 19:51, schrieb Tom Arnold:
>>> Soo, fast am Ziel :)
>>>
>>> Das letzte Puzzlestück, den letzten Record zu identifizieren und
>>> ebenfalls mit dem schliessenden Group-Div zu versehen, klappt, wenn ich
>>> die Anzahl der Records als Zahl reinschreibe (14). Perfekt wäre es, wenn
>>> ich an dieser Stelle sowas wie cObj:parentRecordTotal oder eben die
>>> numRows aus dem select benutzten könnte...
>>>
>>> temp.gruppen = CONTENT
>>> temp.gruppen {
>>> (selectkrams...)
>>> renderObj = COA
>>> renderObj {
>>> stdWrap.dataWrap =
>>> <div class="item-{cObj:parentRecordNumber}">|</div>
>>> stdWrap.outerWrap.cObject = COA
>>> stdWrap.outerWrap.cObject {
>>> 10 = CASE
>>> 10.key.cObject = TEXT
>>> 10.key.cObject.data = cObj:parentRecordNumber
>>> # 2, Berechnung per Modulo
>>> 10.key.cObject.wrap = |%4
>>> 10.key.prioriCalc = intval
>>> # default: nix wrappen
>>> 10.default = TEXT
>>> 10.default.value = |
>>> # erstes element: groupwrap oeffnen:
>>> 10.1 = TEXT
>>> 10.1.value = <div class="group">|
>>> # modulo = 0: groupwrap schliessen:
>>> 10.0 = TEXT
>>> 10.0.value = |<!-- .group --></div>
>>> }
>>> stdWrap.outerWrap.override.cObject = COA
>>> stdWrap.outerWrap.override.cObject {
>>> if.value.data = cObj:parentRecordNumber
>>>
>>> # wie bekomme ich hier die numRows hin?
>>> if.equals = 14
>>>
>>> 10 = TEXT
>>> 10.value = |<!-- .group .last --></div>
>>> }
>>> 10 = TEXT
>>> 10.value = (Hier der Inhalt)
>>> }
>>> }
>>>
>>> Hat da jemand eine Idee?
>>> Vielem Dank,
>>> Tom
>>>
>>>
>>>
>>> Am 27.03.11 14:12, schrieb Tom Arnold:
>>>> Argh. Einen kleinen Schönheitsfehler hat das Ganze noch: Die letzte
>>>> Group wird nicht geschlossen, wenn es nicht genau auf 4 aufgeht. Damn.
>>>> Zu früh gefreut.
>>>>
>>>>
>>>> Am 27.03.11 13:45, schrieb Tom Arnold:
>>>>> temp.gruppen = CONTENT
>>>>> temp.gruppen {
>>>>> (selectkrams...)
>>>>> renderObj = COA
>>>>> renderObj {
>>>>> stdWrap.dataWrap =
>>>>> <div class="item-{cObj:parentRecordNumber}">|</div>
>>>>> stdWrap.outerWrap.cObject = COA
>>>>> stdWrap.outerWrap.cObject {
>>>>> 10 = CASE
>>>>> 10.key.cObject = TEXT
>>>>> 10.key.cObject.data = cObj:parentRecordNumber
>>>>> # 2, Berechnung per Modulo
>>>>> 10.key.cObject.wrap = |%4
>>>>> 10.key.prioriCalc = intval
>>>>> # default: nix wrappen
>>>>> 10.default = TEXT
>>>>> 10.default.value = |
>>>>> # erstes element: groupwrap oeffnen:
>>>>> 10.1 = TEXT
>>>>> 10.1.value = <div class="group">|
>>>>> # modulo = 0: groupwrap schliessen:
>>>>> 10.0 = TEXT
>>>>> 10.0.value = |<!-- .group --></div>
>>>>> }
>>>>> 10 = TEXT
>>>>> 10.value = (Hier der Inhalt)
>>>>> }
>>>>> }
>>>>
>>>
>>
>



More information about the TYPO3-german mailing list