Zum Inhalt springen

RTE im Frontend - $_POST / piVars leer

Erstellt am 7. September 2009 · 2 Antworten · letzte Antwort am 7. September 2009

Tags: Frage

StefanMasz86 ·

Morgen,
Nach einem Wochenende lang suchen, testen und verzweifeln bin ich mal wieder soweit hier um Hilfe zubetteln.

Mein Problem:
Mein Javascript ist nicht so gut wie es sein könnte und ich verstehe es einfach nicht den RTE im Frontend zubenutzten.

Ich habe die Tutorials hier:
http://typo3.org/documentation/document-library/extension-manuals/rtehtmlarea/1.4.4/view/6/2/
und hier
http://www.sk-typo3.de/RTE-im-Frontend-benutzen.285.0.html

immer wieder versucht nach zubauen..

Ich habe es nun geschafft dass:
der RTE angezeigt wird, mein Standardwert aus der DB reingeladen wird und ich ganze normal (wie gewünscht) schreiben kann. Leider scheine ich irgendwo noch einen Fehler zuhaben, denn
piVars / Post sind leer und

$dataArray['target_group'] = $this->RTEObj->transformContent($this, '',$this->PA['itemFormElName'], 'target_group', $row=array(), $this->specConf, $this->thisConfig, '', $this->thePidValue);

liefert immer einen leeren String zurück.
Wobei ich hier auch ein meine Grenzen gestoßen bin. Habe mit verschiedensten Parametern versucht der Funktion eine Ausgabe zuentringen, leider ohne Erfolg.

Hier nochmal meinen kompletter RTE Aufruf:

/* RTE vars */
	var $RTEObj;
    var $strEntryField;
    var $docLarge = 0;
    var $RTEcounter = 0;
    var $formName;
    var $additionalJS_initial = '';		// Initial JavaScript to be printed before the form (should be in head, but cannot due to IE6 timing bug)
	var $additionalJS_pre = array();	// Additional JavaScript to be printed before the form
	var $additionalJS_post = array();	// Additional JavaScript to be printed after the form
	var $additionalJS_submit = array();	// Additional JavaScript to be executed on submit
    var $PA = array(
            'itemFormElName' =>  '',
            'itemFormElValue' => '',
            );
    var $specConf = array();
    var $thisConfig = array();
    var $RTEtypeVal = 'text';
...
main() { ...

$this->RTEObj = t3lib_div::makeInstance('tx_rtehtmlarea_pi2');
        $this->formName = 'prexperts';

if($this->RTEObj->isAvailable()) {
			$pageTSConfig = $GLOBALS['TSFE']->getPagesTSconfig();
			$RTEsetup = $pageTSConfig['RTE.'];
			$this->thisConfig = $RTEsetup['default.'];
		    $this->thisConfig = $this->thisConfig['FE.'];
			$dataArray['target_group'] = $this->RTEObj->transformContent($this, '',$this->PA['itemFormElName'], 'target_group', $row=array(), $this->specConf, $this->thisConfig, '', $this->thePidValue);
		}
...
$this->RTEcounter++;
		$this->formName = 'insertOffer';
		$this->strEntryField = 'target_group';
		$this->PA['itemFormElName'] = 'target_group';
		$this->PA['itemFormElValue'] = '';
		$this->thePidValue = $GLOBALS['TSFE']->id;
		$RTEItem = $this->RTEObj->drawRTE($this,'',$this->strEntryField,$row=array(), $this->PA, $this->specConf, $this->thisConfig, $this->RTEtypeVal, '', $this->thePidValue);
		$sims['###ADDITIONALJS_PRE###'] = $this->additionalJS_initial.'
			<script type="text/javascript">'. implode(chr(10), $this->additionalJS_pre).'
			</script>';
		$sims['###ADDITIONALJS_POST###'] = '
			<script type="text/javascript">'. implode(chr(10), $this->additionalJS_post).'
			</script>';
		$sims['###ADDITIONALJS_SUBMIT###'] = implode(';', $this->additionalJS_submit);

	    //$param = array( 'offerID' => $_GET['offerID']);
$content .= $sims['###ADDITIONALJS_PRE###'].'<form id="insertOffer" name="insertOffer" onsubmit="'.$sims['###ADDITIONALJS_SUBMIT###'].'" method="POST" action="'.$this-">pi_getPageLink($GLOBALS['TSFE']->id)'">
...
$content .= $RTEItem;
...
$content .= '<input type="submit" name="insert" value="Speichern" onsubmit="'.$sims['###ADDITIONALJS_SUBMIT###'].'" /><input type="hidden" name="action" value="save" />
              </form>'.$sims['###ADDITIONALJS_POST###'] .';

Bitte Hilfe.

StefanMasz86 ·

So den Fehler habe ich jetzt selber gefunden!

nämlich war das erstellte Javascript falsch (oder ich habe es falsch benutzt)

aufjedenfall erzeugte mir

$sims['###ADDITIONALJS_SUBMIT###'] = implode(';', $this->additionalJS_submit);

ein script dass das erste element mit dem namen meines feldes mit dem Wert aus dem RTE befüllt, wenn es sich um eine Textarea handelt.

Dummerweise erzeugte vorher:

$RTEItem = $this->RTEObj->drawRTE($this,'',$this->strEntryField,$row=array(), $this->PA, $this->specConf, $this->thisConfig, $this->RTEtypeVal, '', $this->thePidValue);

schon ein hiddenfield mit dem gleichen Namen!!
ergo habe ich nun den marker mit dem vorgenerierten JS ersetzt durch eins wo einfach das 2. Element mit dem Namen genommen wird:

if (RTEarea[\'target_group\'] && !RTEarea[\'target_group\'].deleted) {
    fields = document.getElementsByName(\'target_group\');
    field = fields.item(1);    // <-- vorher Stand hier 0! 
    if (field && field.nodeName.toLowerCase() == \'textarea\') {
	field.value = RTEarea[\'target_group\'][\'editor\'].getHTML();
    }
} else {
   OK = 0;
};

jetzt tritt aber witziger Weise ein anderes Problem auf:

Der RTE im Backend geht nicht mehr!!! aber auch nur unter FF!

Im IE funktioniert er noch.
Nur im FF nicht.. ich bin verzweifelt...

StefanMasz86 ·

und weiter gehts mit dem Monolog Thread (sry für 3fach Post)

aber dieses mal war die Lösung einfacher, habe zwar von hand alle Cache gelöscht, aber irgendwo wurd wohl noch was gecached.. denn nach einem Neustart läuft nun alles! (außer ein paar kleinerer Anzeigefehler im FF, was aber wohl mit den css angaben des designers zutun hat, was ich ihn nun auch debuggen lasse und euch wieder in Ruhe).

Danke fürs zuhören