05. 12. 2014, 10:14

Hallo Zusammen,

hab' leider mal wieder ein kleines Problem, welches ich mir nicht wirklich erklären kann.
Mit folgendem Typoscript / PHP hole ich mir die Element-uids und -pids aus tt_content in der entsprechenden Reihenfolge und schreibe sie in ein Register um sie in meinen CONTENT-Objekten zu verwenden:

  1. 45 = COA_INT
  2. 45 {
  3.  
  4. 2 = USER
  5. 2 {
  6. includeLibs = scripts/News/NewsController.php
  7. userFunc = Tools\NewsController->viewNewsOverview
  8. }
  9.  
  10. 10 = CONTENT
  11. 10 {
  12. table = tt_content
  13. selectFields = DISTINCT tt_content.pid AS tpid
  14. uidInList.cObject = TEXT
  15. uidInList.cObject.data = register:newsUids
  16. pidInList.cObject = TEXT
  17. pidInList.cObject.data = register:newsPids
  18. orderBy = FIELD(uid,{register:newsUids})
  19. orderBy.insertData = 1
  20. }
  21. renderObj = COA
  22. renderObj {
  23. 10 = CONTENT
  24. 10 {
  25. table = tt_content
  26. pidInList.field = tpid
  27. where = colPos = 15
  28. andWhere = uid IN ({register:newsUids})
  29. andWhere.insertData = 1
  30. orderBy = FIELD(uid,{register:newsUids})
  31. orderBy.insertData = 1
  32. }
  33. renderObj = COA
  34. renderObj {
  35. 10 < tt_content
  36. 10.if.equals.field = colPos
  37. 10.if.value = 15
  38. }
  39. stdWrap.wrap = <div class="teaser-boundary">|</div>
  40. }
  41. 20 = CONTENT
  42. 20 {
  43. table = tt_content
  44. pidInList.field = tpid
  45. where = colPos = 16
  46. andWhere = uid IN ({register:newsUids})
  47. andWhere.insertData = 1
  48. orderBy = FIELD(uid,{register:newsUids})
  49. orderBy.insertData = 1
  50. }
  51. renderObj = COA
  52. renderObj {
  53. 10 >
  54. 10 < tt_content
  55. 10.if.equals.field = colPos
  56. 10.if.value = 16
  57. 10.images {
  58. 20 {
  59. cols >
  60. cols = 1
  61. 1 {
  62. imageLinkWrap.linkParams.ATagParams.dataWrap = data-lightbox="{field:uid}" data-title="{field:titletext}"
  63. file {
  64. maxH >
  65. maxW >
  66. maxH = 220c
  67. maxW = 380c
  68. minH < .maxH
  69. minW < .maxW
  70. width >
  71. width = 380c
  72. height >
  73. height = 220c
  74. }
  75. }
  76. equalH >
  77. equalW >
  78. }
  79. }
  80. 10.textpic.20.1 < .20.images.20.1
  81. }
  82. stdWrap.wrap = <div class="details-boundary foldable">|</div>
  83. }
  84. wrap = <div class="news-boundary">|</div>
  85. }
  86. }
  87. } ## 45 end

Kurz zum Hintergrund: Es soll hier ein Language-Fallback stattfinden, der alle Elemente der aktuellen Sprache holt oder aber, falls keine oder nicht genügend Elemente in der Sprache vorhanden sind, diese aus einer Reihenfolge anderer Sprachen holt, bis die mindestanzahl an Elementen erreicht ist. Das macht das PHP-Skript. Soweit sogut, alle uids und pids passen.

Im ersten Content-Element ( 45.10 ) werden die Pids in Reihenfolge des auftretens der gelisteten Uids abgeholt.
Das renderObj enthält verschachtelt zwei weitere CONTENT-Elemente ( 45.10.renderObj.10 und 45.10.renderObj.20), einmal für Spalte 15 ( Teaser ) und Spalte 16 ( Volltext ).
Soweit so gut, das debugging ergibt, dass die SQL-Abfragen passen und entsprechende ( korrekte ) Ergebnisse liefern.
ABER:
Die Ausgabe der Elemente bringt mir zuerst 45.10.renderObj.20 und anschließend 45.10.renderObj.10, d.h.
mein Volltext wird vor seinem Teaser-Text angezeigt.
Wenn ich dass oberste renderObj ( 45.10.renderObj ) von COA auf COA_INT stelle, dann passt die Reihenfolge, allerdings werden die Datensätze dann doppel und dreifach dargestellt ( vermutlich nach Anzahl der Inhaltselemente ergo tt_content-Datensätze der jeweiligen Seite ).

Kann mir hier evtl. einer einen Tipp geben woran das liegt bzw. wie ich das beheben kann, damit die Elemente im renderObj in der korrekten Reihenfolge ausgegeben werden?

P.S.: Typo3 6.2.7

God's in his heaven, all's right with the world