Zum Inhalt springen

RTE-Textfeld in eigener Estension rendern?

Erstellt am 1. Mai 2006 · 4 Antworten · letzte Antwort am 9. Mai 2007

Tags: TCA, Frage

wanky ·

Hallo Typo3-Forum,

seid gut einem halben Jahr bereite ich eine Website mit Hilfe von Typo3 vor. Während der Erstellung habe ich mit Hilfe der Suchfunktion dieses Forums immer etwas gefunden, was meine Probleme gelöst hat. Vielen Dank dafür an dieser Stelle!

Nun bin ich letztendlich an den Punkt gekommen, wo ich nicht mehr weiterweiß. #angry#

Ich habe eine eigene Extension mit Hilfe des Buchs "Praxiswissen Tyo3" (Kapitel 14) erstellt. Sie zeigt die Mitarbeiter eines Instituts an. Hierbei werden Name, Raum, etc. aufgelistet und ein Bild, falls vorhanden. Außerdem gibt es einen Text, der etwas über den jeweiligen Forschungsschwerpunkt beihnhaltet. Die Inhalte werden in einer eigenen Tabelle gespeichert.
Sie läuft soweit eigentlich ganz gut. Bis auf eine Sache.
Die Extension hat unteranderem ein RTE-Textfeld. Dieses Textfeld wird leider nicht richtig gerendert im FE.
Ich habe zich Einstellungen und Codeschnippsel ausprobiert. Ich kriege es nun seid zwei Wochen nicht hin, das dieses Textfeld, wie der normale Content gerendert wird. (Zeilenumbrüche, Links, spamprotected Emailadressen)

Ich poste mal den Code, den ich für relevant halte:

Aus dem Setup der Seite

...
#Parameter Mitarbeiterplugin
######################################
plugin.user_pwmitarbeiter_pi1 {
  templateFile = fileadmin/mitarbeiter.html
  #Formatierung Bild
  bild = IMAGE 
  bild {
    10 = IMAGE
    #Pfad zum Bild wird dynamisch erzeugt
    10.file = unbekannt
    10.file.wrap = <img src="|" alt="" />

     }

   forschung < tt_content.text
}
...

PHP Funktion

...
if (!($row["forschung"]=="")){
$marker["###FORSCHUNG###"] = '<tr>
   <td align="left"><font id="text">'.$this->cObj->stdWrap($row["forschung"],$this->conf["forschung"]).'</font>
   </td>
</tr>
<tr>
   <td width="100%" height="1"><img src="fileadmin/images/spacer_lightblue.gif" width="100%" height="1" alt="" />
   </td>
</tr>';
}else{
   $marker["###FORSCHUNG###"] = '';
}
...

Meines Erachtens liegt es wohl daran, wie der Text geparsed wird.

$this->cObj->stdWrap($row["forschung"],$this->conf["forschung"])

Denn der Text wird genau so, wie der "normale" Content in der Datenbank gespeichert. Leider zeigt meine Extension ihn so nicht an.

Was vielleicht noch wichtig sein könnte:
TYPO3 Ver. 3.7.0
HTMLArea RTE installiert

Ich bin für jede Hilfe sehr dankbar. Wahrscheinlich ist die Lösung trivial, nur sehe ich es einfach nicht. #paralyzed#

Viele Grüße,
Philipp

steffenk ·

die Ursache liegt ganz woanders.

Änder den Eintrag in der tca.php

rte_transform[mode=ts_css]

und benutze dann statt
$row['forschung']
einfach
$this->pi_RTEcssText($row['forschung'])

wanky ·

Hallo steffenk,##erstmal Danke für die schnelle Antwort.

leider hat der Code nichts bewirkt. Der Text wird immernoch nicht gerendert.

Die Extension sieht jetzt so aus:

Setup:

...
#Parameter Mitarbeiterplugin
######################################
plugin.user_pwmitarbeiter_pi1 {
  templateFile = fileadmin/mitarbeiter.html
  #Formatierung Bild
  bild = IMAGE 
  bild {
    10 = IMAGE
    #Pfad zum Bild wird dynamisch erzeugt
    10.file = unbekannt
    10.file.wrap = <img src="|" alt="" />
     }
   forschung < tt_content.text
}...

Die PHP Funktion:

...
<tr>
<td align="left"><font id="text">'.$this->pi_RTEcssText($row["forschung"]).'</font></td>
</tr>
...

Die tca.php:

...
"types" => Array (
		"0" => Array("showitem" => "hidden;;1;;1-1-1, vorname, nachname,
titel, raum, telefon, fax, sprechstunde, email, lehre,
forschung;;;richtext[paste|bold|italic|underline|formatblock|class|left|center|
right|orderedlist|unorderedlist|outdent|indent|link|image]:rte_transform[mode=ts_css], bild")
...

Vielleicht ist meine RTE-Konfiguration noch interessant:

...
#Inhaltstyp "Normaler Text" anpassen
  tt_content.text.20 {
  textStyle >
  wrap = <p>|</p>
}
tt_content.stdWrap.dataWrap >
# Formatvorgaben für den RTE/ das FE
  tt_content.text.20.parseFunc {

    #typolist in html-Listen umschreiben
    tags.typolist.default.wrap = <UL> | </UL>
    tags.typolist.default.split.1.wrap = <LI> | </LI>

    # Font-Tags sind nicht im Quellcode erlaubt
    denyTags = font

    nonTypoTagStdWrap.encapsLines.addAttributes {
    PRE.style =
    P.style =
    LI.style =
   }
}
RTE.default.proc.typolist=0

...

Ich hatte auch schon die Methode mit dem "rte_transform[mode=ts_css}]" schon ausprobiert gehabt. Allerdings nicht mit der Kombination "pi_RTEcssText($row['forschung'])".
Hast Du vielleicht noch eine Idee? Ich hatte auch schon die Mailinglisten zu rate gezogen. Aber leider fand ich auch dort keine Antwort. 😢

Ich wünsche eine geruhsame Nacht, vielleicht klappts ja schon morgen 😉.
Viele Grüße,
Philipp

wanky ·

Hallo,

finally hab ich es endlich gelöst. #giggle#

Und zwar hat mich dieser Post: #16488 auf die Lösung gebracht.

...
#Parameter Mitarbeiterplugin
######################################
plugin.user_pwmitarbeiter_pi1 {
  templateFile = fileadmin/mitarbeiter.html
  #Formatierung Bild
  bild = IMAGE 
  bild {
    10 = IMAGE
    #Pfad zum Bild wird dynamisch erzeugt
    10.file = unbekannt
    10.file.wrap = <img src="|" alt="" />
     }
   forschung < tt_content.text
   forschung {
   parseFunc < tt_content.text.20.parseFunc
   }
}
...
...
<td align="left">'.$this->cObj->parseFunc($row["forschung"], $this->conf["forschung."]["parseFunc."]).'</td>
...

Im Endeffekt habe ich die parseFunc im Setup definiert, indem ich die parseFunc vom normalen content darauf kopiert habe. Und im PHP Script die Funktion parseFunc des CObjekts genutzt, um den Text aus der Datenbank ($row["forschung"]) mit der kopierten parseFunc aus dem Setup ($this->conf["forschung."]["parseFunc."])) zu rendern.
Hierbei sei gesagt, das es nicht reicht, einfach nur das Textobjekt auf "forschung" zu kopieren (Zeile 14: forschung < tt_content.text). Mann muss die parseFunc explizit auch noch mal kopieren (Zeile 16: parseFunc < tt_content.text.20.parseFunc), dann läufts.

Es war ein langer beschwerlicher Weg, aber es klappt ja nun endlich. Und letztendlich habe ich die Lösung doch wieder hier im Forum gefunden 😉

Also, macht weiter so.
Vielen Dank,
Philipp