Zum Inhalt springen

rtehtmlarea einbinden

Erstellt am 2. April 2006 · 19 Antworten · letzte Antwort am 11. Dezember 2006

Tags: Frage

KurzVormAusticken ·

Erst einmal danke, hat mir sehr geholfen und so funktioniert es auch.

Ich möchte nun auch im Backend (Aber jetzt nicht über $TCA sondern per PHP) den gerade installierten RTE einbinden.

$PA["extra"] = "richtext:rte_transform[flag=rte_enabled|mode=ts_css]";
$myRTE = new t3lib_TCEforms;
$content = $myRTE->getSingleField_typeText("tt_content","my_bodytext",$PA["row"],$PA);

Jetzt wird lediglich angezeigt "Der Editor wird geladen. Bitte warten...", dass wars aber auch schon. Habe es auch schon über ->drawRTE(..) versucht.

Mit htmlArea funktioniert es ja, wenn ich es wie in "sr_guestbook" mache, nur wenn jemand einen anderen Editor hat, tja, dann schauts schlecht aus.

Vielleicht hat ja jemand dafür auch eine Lösung...

So, jetzt erst mal "Malzeit" 🙂

Plappermaul ·

Am Anfang der Klasse die du schreibst musst du zunächst mal das hier eingeben:

/**
 * Start adding fields for the RTE API
 */
	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';
	var $thePidValue;
/**
 * End adding fields for the RTE API
 */

An der Stelle, wo das Formular ausgegeben wird kommt dann ungefährt sowas

		$content .= "<form method="\"post\"" name="\"fussball-news\"" onsubmit="\"".implode(';'," this-="">additionalJS_submit)."\">";
		/**
		 * Start setting the RTE markers
		 */
				$content .= nl2br(print_r($_GLOBALS,true));
		if(!$this->RTEObj)  $this->RTEObj = t3lib_div::makeInstance('tx_rtehtmlarea_pi2');
		if($this->RTEObj->isAvailable()) {
			$this->RTEcounter++;
			$tabelle = "tx_fussballnews_news";
			$this->formName = 'fussball-news';
			$this->strEntryField = 'text';
			$this->PA['itemFormElName'] = 'tx_fussballnews_pi1[text]';
			$this->PA['itemFormElValue'] = $this->postvars[$this->strEntryField];			
			$this->thePidValue = $GLOBALS['TSFE']->id;
			$RTEItem = $this->RTEObj->drawRTE($this,$tabelle,$this->strEntryField,$row=array(), $this->PA, $this->specConf, $this->thisConfig, $this->RTEtypeVal, '', $this->thePidValue);
			
			$content .= $this->additionalJS_initial.'<script type="text/javascript">'. implode(chr(10), $this->additionalJS_pre).'</script>';
			$content .= $RTEItem;
			$content .= '<script type="text/javascript">'. implode(chr(10), $this->additionalJS_post).'	</script>';			
		} 
		/**
		 * End setting the RTE markers
		 */
		$content .= "<input type="\"submit\"" />";
		$content .= "</form>";

Dieses Editor wird geladen hatte ich auch. Problem war, das ich die Funktionen $this->additionalJS_post, $this->additionalJS_pre, $this->additionalJS_initial und $this->additionalJS_submit nicht ordentlich an der richtigen Stelle eingebunden hatte.

KurzVormAusticken ·

Hi Plappermaul,

ja, im Frontend funktioniert das optimal ich möchte das ganze nur im Backend nutzen. Habe eine Extension programmiert wo ich gerne per PHP den zur Zeit installierten RTE einbinden kann.

Ich möchte den RTE mit einer eigener PHP funktion die wiederum über den "type" => "user" / "userFunc" => "user_class->zeigeRTE" in der Flexform eingebunden werden soll
(Es muss leider auf diesen Wege passieren).

Hoffe Ihr versteht mich was ich machen möchte :o

oder mal so...

in der "ext_tables.php" wird per

$tempColumns = Array(
	"kommuWebInfo"	=> Array (
		"label" => "LLL:EXT:kommuWeb/locallang_db.xml:kommuWeb_info",
		"config" => array (
			"type" => "user",
			"userFunc" => "user_kwPowerForm->init",
		),
	),
);
t3lib_extMgm::addTCAcolumns("tt_content", $tempColumns, 1);
$TCA['tt_content']['types'][$_EXTKEY.'_pi1']['showitem']='kommuWebInfo;;;;1-1-1';

Eine "userFunc" aufgerufen die den RTE und weitere Felder einbinden soll. Es funktioniert alles wunderbar bis auf den RTE, da bekomme ich nur die Meldung "Der Editor wird geladen. Bitte warten..." 😢

Kannst Du mir da auch weiterhelfen? Versuche das jetzt schon seit Tagen oder stehe ich nur auf dem Schlauch???

mfg...

steffenk ·

wenn diese Meldung auftaucht, ist ein notwendiges Javascript nicht eingebunden.
Oder Du hast das JS im Head statt im Body.

KurzVormAusticken ·

Hallo steffenk... Ja, das habe ich auch gerade gemerkt...

Jetzt sieht es so aus:

....
<script type="text/javascript">
/*<![CDATA[*/
var RTEarea = new Array();
RTEarea[0] = new Array();
RTEarea[0]["version"] = "1.3.7";
RTEarea[0]["popupwin"] = "/typo3temp/rtehtmlarea_popupwin_dfe0003b07ec25b3a22b58c7377bd978.js";
RTEarea[0]["htmlarea-gecko"] = "/typo3temp/rtehtmlarea_htmlarea-gecko_1cb933d42ec11fa06735f7a2a6ff2563.js";
RTEarea[0]["htmlarea-ie"] = "/typo3temp/rtehtmlarea_htmlarea-ie_4a6eb4da716a0de416e07599dbd30ee6.js";
var _editor_url = "/typo3/sysext/rtehtmlarea/htmlarea";
var _editor_lang = "de";
var _editor_CSS = "/typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css";
var _editor_skin = "/typo3/sysext/rtehtmlarea/htmlarea/skins/default";
var _editor_edited_content_CSS = "http://kommuweb/typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea-edited-content.css";
var _typo3_host_url = "http://kommuweb";
var _editor_debug_mode = false;
var _editor_compressed_scripts = false;
var _editor_mozAllowClipboard_url = "http://releases.mozilla.org/pub/mozilla.org/extensions/allowclipboard_helper/allowclipboard_helper-0.5.3-fx+mz.xpi";
var _spellChecker_lang = "";
var _spellChecker_charset = "";
var _spellChecker_mode = "";
var _quickTag_hideTags = "";
/*]]>*/
</script>

<script type="text/javascript" src="/typo3temp/rtehtmlarea_de_iso-8859-1_abe207ff1a9e9d1d0b1fa7d2907467ce.js"></script>
<script type="text/javascript" src="/typo3temp/rtehtmlarea_htmlarea_a5631abce6f4c4f1b1cb2fbcc778868c.js"></script>

<script type="text/javascript">
var conf_RTEtsConfigParams = "&RTEtsConfigParams=tt_content%3ANEW449968f088b95%3AkommuWebPowerForm%3A-1%3Atext%3A-1%3A";
var rtePathImageFile = "../mod4/select_image.php";
var rtePathLinkFile = "../mod3/browse_links.php";
var rtePathUserFile = "../mod5/user.php";
var rtePathAcronymFile = "../mod2/acronym.php";
var rtePathParseHtmlFile = "/typo3/sysext/rtehtmlarea/mod6/parse_html.php";
HTMLArea.loadPlugin("ContextMenu", true, "/typo3temp/rtehtmlarea_ContextMenu_aac3d15d76e52e7101acfb6228fe9e71.js");
HTMLArea.loadPlugin("SelectColor", true, "/typo3temp/rtehtmlarea_SelectColor_d6c5fac10a5b0b94f1a343d341a63415.js");
HTMLArea.loadPlugin("TYPO3Browsers", true, "/typo3temp/rtehtmlarea_TYPO3Browsers_e871f80c087d421f8ff4f036a4cf43ba.js");
HTMLArea.init();</script><input type="hidden" name="data[tt_content][NEW449968f088b95][_TRANSFORM_kommuWebPowerForm]" value="RTE" />

<div id="pleasewait1" class="pleasewait">Der Editor wird geladen. Bitte warten...</div>
<div id="editorWrap1" class="editorWrap" style="visibility:hidden; width:530px; height:380px;">
<textarea id="RTEarea1" name="data[tt_content][NEW449968f088b95][kommuWebPowerForm]" style="position:relative; left:0px; top:0px; height:380px; width:530px; border: 1px solid black; padding: 2px 0px 2px 2px;">
....

Ich denke jetzt müsste alles eingebunden sein, jedoch kommt immer noch die Meldung das der Editor geladen wird...

Bin schon echt am verzweifeln...

Gruß...

steffenk ·

nö, da fehlt noch ne Menge ...

nur mal ein Ausschnitt, was z.B. alles fehlt (hier mit Index 1)

RTEarea[1] = new Array();
			RTEarea[1]["number"] = 1;
			RTEarea[1]["id"] = "RTEarea1";
			RTEarea[1]["enableWordClean"] = true;
			RTEarea[1]["htmlRemoveComments"] = true;
			RTEarea[1]["disableEnterParagraphs"] = false;
			RTEarea[1]["removeTrailingBR"] = true;
			RTEarea[1]["useCSS"] = false;
			RTEarea[1]["keepButtonGroupTogether"] = true;
			RTEarea[1]["disablePCexamples"] = false;
			RTEarea[1]["statusBar"] = true;
			RTEarea[1]["showTagFreeClasses"] = false;
			RTEarea[1]["useHTTPS"] = false;
			RTEarea[1]["enableMozillaExtension"] = false;
			RTEarea[1]["typo3ContentLanguage"] = "";
			RTEarea[1]["typo3ContentCharset"] = "iso-8859-1";
			RTEarea[1]["enablePersonalDicts"] = false;
			RTEarea[1]["userUid"] = "BE_2";
			RTEarea[1]["plugin"] = new Array();
			RTEarea[1]["plugin"]["TableOperations"] = true;
			RTEarea[1]["plugin"]["ContextMenu"] = true;
			RTEarea[1]["plugin"]["SelectColor"] = true;
			RTEarea[1]["plugin"]["TYPO3Browsers"] = true;
			RTEarea[1]["plugin"]["FindReplace"] = true;
			RTEarea[1]["plugin"]["RemoveFormat"] = true;
			RTEarea[1]["plugin"]["CharacterMap"] = true;
			RTEarea[1]["plugin"]["InlineCSS"] = true;
			RTEarea[1]["plugin"]["DynamicCSS"] = true;
			RTEarea[1]["htmlRemoveTags"] = /^(center|font|o:p|sdfield|strike|u)$/i;
			RTEarea[1]["htmlRemoveTagsAndContents"] = /^(style|script)$/i;
						RTEarea[1]["disableColorPicker"] = false;
			RTEarea[1]["classesTag"] = new Array();
			RTEarea[1]["classesTag"]["span"] = "important,name-of-person,detail";
			RTEarea[1]["classesTag"]["p"] = "align-left,align-center,align-right,csc-frame-frame1,csc-frame-frame2";
			RTEarea[1]["classesTag"]["img"] = null;
			RTEarea[1]["classesTag"]["table"] = "csc-frame-frame1,csc-frame-frame2";
			RTEarea[1]["classesTag"]["a"] = "external-link,external-link-new-window,internal-link,internal-link-new-window,download,mail";
			RTEarea[1]["classesTag"]["td"] = "align-left,align-center,align-right";
			RTEarea[1]["fontname"] = {
				"Keine Schriftart" : "",
				"Arial" : "Arial,sans-serif",
				"Arial Black" : "Arial Black,sans-serif",
				"Verdana" : "Verdana,Arial,sans-serif",
				"Times New Roman" : "Times New Roman,Times,serif",
				"Garamond" : "Garamond",
				"Lucida Handwriting" : "Lucida Handwriting",
				"Courier" : "Courier",
				"Webdings" : "Webdings",
				"Wingdings" : "Wingdings"};
			RTEarea[1]["paragraphs"] = {
				"Normal" : "p",
				"Überschrift 1" : "h1",
				"Überschrift 2" : "h2",
				"Überschrift 3" : "h3",
				"Überschrift 4" : "h4",
				"Überschrift 5" : "h5",
				"Überschrift 6" : "h6"};
			RTEarea[1]["fontsize"] = {
				"Keine Größe" : "",
				"1 (8 pt)" : "1",
				"2 (10 pt)" : "2",
				"3 (12 pt)" : "3",
				"4 (14 pt)" : "4",
				"5 (18 pt)" : "5",
				"6 (24 pt)" : "6",
				"7 (36 pt)" : "7"};
			RTEarea[1]["hideTableOperationsInToolbar"] = false;
			RTEarea[1]["keepToggleBordersInToolbar"] = false;
			RTEarea[1]["disableLayoutFieldsetInTableOperations"] = true;
			RTEarea[1]["disableAlignmentFieldsetInTableOperations"] = true;
			RTEarea[1]["disableSpacingFieldsetInTableOperations"] = true;
			RTEarea[1]["disableBordersFieldsetInTableOperations"] = true;
			RTEarea[1]["disableColorFieldsetInTableOperations"] = true;
			RTEarea[1]["classesAnchorUrl"] = "/typo3temp/rtehtmlarea_classesAnchor_0_2149e6b1534efb3431afb08b966c53f0.js";
			RTEarea[1]["toolbar"] = [["separator", "I[style]", "DynamicCSS-class", "space", "I[text_style]", "InlineCSS-class", "linebreak", "separator", "FormatBlock", "separator", "Bold", "Italic", "Subscript", "Superscript", "separator", "InsertOrderedList", "InsertUnorderedList", "Outdent", "Indent", "separator", "TextIndicator", "separator", "InsertCharacter", "CreateLink", "InsertImage", "InsertTable", "separator", "FindReplace", "separator", "HtmlMode", "RemoveFormat", "separator", "Undo", "Redo", "separator", "About", "linebreak", "separator", "TO-toggle-borders", "separator", "TO-table-prop", "separator", "TO-row-prop", "TO-row-insert-above", "TO-row-insert-under", "TO-row-delete", "TO-row-split", "separator", "TO-col-insert-before", "TO-col-insert-after", "TO-col-delete", "TO-col-split", "separator", "TO-cell-prop", "TO-cell-insert-before", "TO-cell-insert-after", "TO-cell-delete", "TO-cell-split", "TO-cell-merge"]];
			HTMLArea.initEditor(1);
KurzVormAusticken ·

Guten morgen Steffenk,

ja, jetzt wo Du es sagst, habe ich mal bei einem normalen Textelement ein bisschen weiter unten geschaut und... Da steht ja noch viel, viel... mehr :o .

So, da muss ich halt doch noch ein bisschen probieren wie ich das zum laufen bekomme.

Bis dann...

KurzVormAusticken ·

So, habe jetzt mal spaßhalber den Tinyrte installiert und siehe da.

mit:

function showRTE($PA) {
  ...
  $myRTE = t3lib_div::makeInstance('t3lib_tceforms');
  return $myRTE->getSingleField_typeText("tt_content","bodytext",$PA["row"],$PA);
}

funktioniert es wunderbar... Warum nur nicht mit Htmlarea #evil#

Krempasky ·

Hallo,

auch ich habe probiert, htmlarea in eine eigene Extension als Frontend Plugin einzubinden und habe nur einen Teilerfolg erzielen können. Der Editor wird optimal im Firefox angezeigt, im IE crashed die Anzeige total(Elemente werden vertikal untereinander angezeigt) und im Opera ist überhaupt nichts vom Editor zu sehen.

Hatte von Euch jemand ähnliche Probleme oder könnt ihr mir sagen an was es evtl. liegen könnte?

Wäre sehr dankbar wenn ihr mir dabei helfen würdet!

steffenk ·

ok, hier mal eine Hilfestellung, den RTE im FE einzubinden.
Es hat sich etwas geändert, daher führt eine alte Methode zur Nichtdarstellung des RTE.

Das Template muss folgende Marker besitzen:

###ADDITIONALJS_PRE###
<form action="" method="post" enctype="multipart/form-data" name="xyz" onsubmit="###ADDITIONALJS_SUBMIT###">
...
###RTEFIELD###
...
</form>
###ADDITIONALJS_POST###

In der Extensionklassen-Datei muss folgender Include am Anfang stehen:

require_once(t3lib_extMgm::extPath('rtehtmlarea').'pi2/class.tx_rtehtmlarea_pi2.php');

In der Extensionklasse müssen folgende Variablen am Anfang definiert werden:

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';
    var $thePidValue;

und der RTE wird folgendermassen eingefügt:

/*RTE*/
		$this->RTEObj = t3lib_div::makeInstance('tx_rtehtmlarea_pi2');
		$this->formName = 'der_formname';
		
		
		$this->RTEcounter++;
		$this->PA['itemFormElName'] = $this->prefixId.'[copyrightinfo]';
		if($piVars['phid']==0) {
			$t=$piVars['copyrightinfo'];
		}else{
			$t=$copyrightinfo;
		}
		$this->PA['itemFormElValue'] =  $t;
		$RTEItem = $this->RTEObj->drawRTE($this,'tabellenname','feldname',$row=array(), $this->PA, $this->specConf, $this->thisConfig, $this->RTEtypeVal, '',$GLOBALS['TSFE']->id);
		$markerArray['###RTEFIELD###']=$RTEItem;
		
		$markerArray['###ADDITIONALJS_PRE###'] = $this->additionalJS_initial.'
		<script type="text/javascript">'. implode(chr(10), $this->additionalJS_pre).'
		</script>';
		$markerArray['###ADDITIONALJS_POST###'] = '
		<script type="text/javascript">'. implode(chr(10), $this->additionalJS_post).'
		</script>';
		$markerArray['###ADDITIONALJS_SUBMIT###'] = implode(';', $this->additionalJS_submit);
_Hannes ·

Hallo,

ich soll einen FE-News-Editor einbinden, ich hab aber nicht so viel Ahnung von TypoScript usw. Ich hab jetzt mht_feedit und news_feedit runtergeladen und beides installiert. Dabei gabs auch keine Probleme. Dann hab ich eine neu Seite erstellt, das Template angelegt (alles Standard, nur die Default config von news_feedit included) und das Plugin-Element mit FE News erstellt. Wenn ich Seite anzeigen lasse, steht da allerdings folgendes:

Authentication failed
Of some reason the authentication failed.

Was muss ich noch konfigurieren dass das ganze läuft? Bitte wenn möglich anfänger-verständlich ausdrücken #giggle#

PS: Ich habe gehört dass es alternativ noch fe_rtenews gäbe, ich kann das aber nirgends mehr finden... Wurde die Entwicklung eingestellt?

Gruß, Hannes