Bug oder Feature – Unterschiedliche Verarbeitung von COA und COA_INT
| Autor | Nachricht |
|---|---|
|
Verfasst am: 17. 06. 2011 [12:06]
|
|
|
Tosta
Themenersteller
Dabei seit: 14.03.2007
Beiträge: 107
|
Hi, der einzige Unterschied zwischen den Inhaltsobjekten COA und COA_INT sollte sein, dass COA_INT nicht cached wird; in verschiedenen Dokumentationen, allen voran TSRef, finde ich jedenfalls keine gegenteilige Aussage. Ich bin allerdings auf einen Fall gestoßen, in dem der Einsatz eines COA bzw. eines COA_INT zu unterschiedlichen Ergebnissen führt. Die TYPO3-Version ist 4.5.2. Das folgende Beispiel ist sehr abstrakt, aber dafür kompakt. Ich habe meinen tatsächlich eingesetzten Code weitgehend eingedampft. Kurze Beschreibung der Anforderung: Eine Reihe von Textstücken wird ausgegeben. Dabei steht zwischen den Textstücken immer ein Separator, im Beispiel »#«. Hinter dem letzten Textstück steht kein Separator. Leere Textstücke müssen ignoriert werden, d.h. hinter einem leeren Textstück folgt kein Separator, und somit erscheinen auch keine zwei Separatoren unmittelbar hintereinander. Ich realisiere das mit der stdWrap-Funktion split. Der Trenner dafür ist »---«; er wird mittels wrap hinter jedes Textstück gesetzt. split trennt dann die Textstücke und setzt hinter jedes – außer dem letzten! – den Separator. Die einzelnen Textstücke sind 1. ein einfacher TEXT, »one« 2. ein COA ohne Inhalt, indirekt referenziert als TS-Element coa 3. ein einfacher TEXT, »two« 4. ein COA_INT ohne Inhalt, indirekt referenziert als TS-Element coa_int 5. ein einfacher TEXT, »three« 6. ein COA_INT ohne Inhalt, direkt benutzt 7. ein einfacher TEXT, »four« Das Ganze ist noch ein bisschen strukturiert: Alle 5 Textstücke sind in ein COA eingepackt, für das required gesetzt ist. Damit wird die Anforderung »Leere Textstücke müssen ignoriert werden« erreicht. TYPOSCRIPT lib.my { coa = COA coa { 10 = TEXT } coa_int = COA_INT coa_int { 10 = TEXT } element = COA element.stdWrap { wrap = | --- required = 1 } foo = COA foo { stdWrap.split { token = --- cObjNum = |*|1|*|2||3| 1 { current = 1 wrap = | # } 2 { current = 1 } } 10 < lib.my.element 10.10 = TEXT 10.10.value = one 20 < lib.my.element 20.10 < lib.my.coa 30 < lib.my.element 30.10 = TEXT 30.10.value = two 40 < lib.my.element 40.10 < lib.my.coa_int 50 < lib.my.element 50.10 = TEXT 50.10.value = three 60 < lib.my.element 60.10 < COA_INT 60.10.10 = TEXT 70 < lib.my.element 70.10 = TEXT 70.10.value = four } } Die Überraschung: Bei der Ausgabe wird das indirekt referenzierte COA_INT (40) nicht als leer erkannt, wie an den zwei hintereinander stehenden Separatoren zu erkennen ist: HTML one#two##three#four Das indirekte COA und das direkte COA_INT werden aber richtig als leer erkannt und ignoriert. In meinen Augen ist das ein Bug, der unter sehr speziellen Umständen zum Tragen kommt – aber ich will nichts überstürzen. Vielleicht hab ich selbst etwas falsch konfiguriert. Was meint ihr? Danke für eure Beiträge. Tosta [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 17.06.2011 um 12:59.] |
|
Verfasst am: 21. 06. 2011 [13:08]
|
|
|
Julian.Hofmann
Dabei seit: 18.05.2007
Beiträge: 2080
|
Hallo. Kann es sein, dass Du hier außer mit den einzelnen cObjects noch an anderer Stelle mit dem Cache kolledierst? Stichwort temp/lib in TypoScript ( http://sebastiaandejonge.com/blog/articles/2010/september/16/typoscript-temp-vs-lib/ ). Viele Grüße Julian |



