Rahmen (section_frame) seit TYPO3 4.3
Seit TYPO3 4.3 hatten sich Meldungen gemehrt, dass sich die Rahmen nicht mehr so problemlos ändern ließen (wohl gemerkt: ändern). Neue Rahmen hinzufügen ging hingegen problemlos, wie gewohnt.
# Funktioniert seit 4.3 *nicht* mehr tt_content.stdWrap.innerWrap.cObject.1.value = <div class="mein-rahmen"></div> |
So stellte sich die Frage, was sich geändert hat, und wie aktuelle der Weg aussehen müsste. Dem bin ich im Zuge einer Forendiskussion nachgegangen.
Vergleich des TypoScript in 4.2 vs. 4.3
css_styled_content in TYPO3 4.2 (Ausschnitt):
tt_content.stdWrap { innerWrap.cObject = CASE innerWrap.cObject { key.field = section_frame 1 = TEXT 1.value =<div class="csc-frame csc-frame-invisible">|</div> 5 = TEXT 5.value = | # ... } } |
css_styled_content in TYPO3 4.3 (Ausschnitt):
tt_content.stdWrap { innerWrap.cObject = CASE innerWrap.cObject { key.field = section_frame default = COA default { 10 = TEXT 10 { value = <div id="c{field:uid}" override.cObject = TEXT override.cObject { value = <div if.value = div if.equals.field = CType } insertData = 1 } 15 = TEXT 15 { value = csc-default noTrimWrap = | class="|" | required = 1 } # ... } 1 =< tt_content.stdWrap.innerWrap.cObject.default 1.15.value = csc-frame csc-frame-invisible 5 =< tt_content.stdWrap.innerWrap.cObject.default 5.15.value = csc-frame csc-frame-rulerBefore # ... } } |
Was ist nun die Änderung, die in die Quere kommt?
In TYPO3 4.2 waren die cObjects einfache TEXT-Objekte. Diesen konnte man problemlos einen neuen Value zuweisen und alles hat gepasst.
In TYPO3 4.3 ist das cObject nun kein TEXT-Objekt mehr, sondern ein COA-Objekt. Dieses wird für den default-Fall definiert und in allen weiteren Fällen referenziert ( =< ). COA-Objekte haben keine value-Eigenschaft, wodurch eine Änderungen wie am Artikelanfang keine Auswirkung hat, weil sie einfach ignoriert wird.
Möglich wäre nun, dass man das definierte cObject erst einmal löscht (damit aber auch die spaceBefore/spaceAfter-Behandlung usw.), und dann im Anschluss wieder wie früher ein TEXT-Objekt direkt definiert:
tt_content.stdWrap.innerWrap.cObject.1 > tt_content.stdWrap.innerWrap.cObject.1 = TEXT tt_content.stdWrap.innerWrap.cObject.1.value = <div class="mein-rahmen">|</div> |
Eigene Rahmen
Dem Ganzen kann man auch etwas aus dem Weg gehen durch eigene Rahmen. Das Schaffen eigener Rahmen erklärt Steffen in Neue Rahmen für Content-Elemente. Aber aufpassen, spaceBefore/-After usw. würden damit wegfallen – oder müssten mit im TS ergänzt werden.