TYPO3-Testaccount
Testen Sie die aktuellste TYPO3-Version kostenlos und unverbindlich für einen Monat!

Jetzt testen!

Schulungen

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.]
Profil
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
Profil