12. 02. 2014, 10:41

Ich hab gerade ein seltsames Problem, bei dem ich nicht weiterkomme. Und zwar nutzen wir hier intern ein TYPO3-System zur Generierung von HTML-Newslettern. Der Redakteur kann dabei aus einigen Standard Content-Elementen und speziell vorbereiteten gridelements wählen.

Ich setze bei den Newslettern grundsätzlich auf die Oldschool Font-Tags und versuche so gut es geht CSS zu vermeiden. Ich lasse bei der Text Ausgabe im Frontend daher alles in font-Tags rendern:

[code]

  1. lib.parseFunc_RTE {
  2. nonTypoTagStdWrap.encapsLines {
  3. encapsTagList = p,pre,h1,h2,h3,h4,h5,h6,hr,dt
  4. remapTag.DIV = FONT
  5. remapTag.P = FONT
  6. innerStdWrap_all.wrap = |<br/>
  7. innerStdWrap_all.ifBlank = &nbsp;
  8. nonWrappedTag = FONT
  9. addAttributes.FONT.size = 2
  10. addAttributes.FONT.color = #333333
  11. addAttributes.FONT.face = {$defaultFontSet}
  12. }
  13. }
[/code]

Das funktioniert mit dem normalen Content-Element "Text" auch wunderbar. Bei den gridelements wo ich RTE-Felder einsetze, hab ich aber ein seltsames Verhalten:

Wenn ich ein Plain-Text mit 2 Absätzen in das RTE-Feld kopiere und dann speichere, sieht im Backend und Frontend alles sauber aus. Wenn ich den Text dann per STRG-X in die Zwischenablage verfrachte und wieder in das RTE-Feld reinkopiere sieht es im Backend zunächst noch normal aus. Sobald ich es dann wieder speichere, fügt er komischer Weise CRLF Zeilenumbrüche ein. Das führt dazu, dass im Frontend dann nicht mehr der Absatz mit Font-Tag gewrappt wird, sondern jede einzelne Zeile.

In der Datenbank sieht das nach dem Speichern so aus:

[code]

  1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  2. <T3FlexForms>
  3. <data>
  4. <sheet index="sDEF">
  5. <language index="lDEF">
  6. <field index="headline">
  7. <value index="vDEF">Lorem Ipsum Headline</value>
  8. </field>
  9. <field index="content">
  10. <value index="vDEF">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo
  11. ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis
  12. dis parturient montes, nascetur ridiculus mus.&lt;br /&gt;&lt;br /&gt;Donec quam felis,
  13. ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat
  14. massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate
  15. eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae,
  16. justo.</value>
  17. <value index="_TRANSFORM_vDEF.vDEFbase">&lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.&amp;nbsp;&lt;/p&gt;</value>
  18. <value index="_TRANSFORM_vDEF">RTE</value>
  19. </field>
  20. <field index="image">
  21. <value index="vDEF">ADD_Asia.png</value>
  22. </field>
  23. <field index="image_position">
  24. <value index="vDEF">bottomcenter</value>
  25. </field>
  26. </language>
  27. </sheet>
  28. </data>
  29. </T3FlexForms>
[/code]

Die Einbindung des RTE-Feldes mache ich bei den gridelements wie folgt:
[code]

  1. <content>
  2. <TCEforms>
  3. <label>Content</label>
  4. <config>
  5. <type>text</type
  6. <cols>35</cols>
  7. <rows>4</rows>
  8. </config>
  9. <defaultExtras>richtext:rte_transform[flag=rte_enabled]</defaultExtras>
  10. </TCEforms>
  11. </content>
[/code]

und im Typoscript definiere ich für das Frontend-Rendering folgendes:
[code]

  1. 210 = TEXT
  2. 210 {
  3. data = field:flexform_content
  4. parseFunc =< lib.parseFunc_RTE
  5. wrap = <td width="420" valign="top">|</td>
  6. }
[/code]

Es sollte daher auf jeden Fall mit der Standard parseFunc_RTE gerendert werden, eigentlich so wie das normale Content-Element "Text". Aber das scheint nicht so zu sein.

Hab schon diverse RTE-Konfigurationen ausprobiert um zu vermeiden dass die Zeilenumbrüche gespeichert werden:
[code]

  1. RTE {
  2. default {
  3. showButtons = removeformatcopy,cut,copy,paste,formatblock,undo,redo,bold,italic,underline,orderedlist,unorderedlist,insertcharacter,link,line,findreplace,chMode
  4. enableWordClean = 1
  5. removeTrailingBR = 1
  6. removeComments = 1
  7. removeTags = center,o:p,sdfield,span,table,td,tr,caption,th,tfoot,tbody,thead
  8. removeTagsAndContents = style,script
  9. }
  10. proc {
  11.  
  12. # <br>-Tags nicht zu <p>-Tags konvertieren
  13. dontConvBRtoParagraph = 1
  14.  
  15. HTMLparser_rte {
  16. # Tags entfernen, die nicht richtig verschachtelt sind
  17. keepNonMatchedTags = 1
  18. }
  19. }
  20. }
[/code]

Ich kriege es aber einfach nicht behoben. Hat jemand ähnliche Erfahrungen schon gemacht oder kennt das Problem?

Seltsam finde ich dabei auch, dass der Text vom CE-Type "Text" anders in der Tabelle tt_content abgespeichert wird, als die Flexforms. Im Feld pi_flexform werden p-Tags XML konform mitgespeichert. Bei den normalen Texten im Feld "bodytext" werden die p-Tags nicht mitgespeichert.