Afficher un RTE dans un module BackEnd

De Typo3 CMS / Documentation Typo3 / Support Typo3.

Sommaire

Déclarations

Pour afficher un RTE dans un module BackEnd il vous faut inclure la classe TCEforms au début de votre classe comme ci-dessous et déclarer les variables nécessaires:

...
 require_once(PATH_t3lib.'class.t3lib_tceforms.php' );
 ...
 class  mon_module extends t3lib_SCbase 
 {
 	...
 
 	var $tceforms;		// Classe pour le RTE
 	var $RTEbo_JS_avant;	// Javascript a placer au début de la page
 	var $RTEbo_JS_action;	// Javascript à placer dans le onSubmit du formulaire
 
 	/**
 	 * Initializes the Module
 	 * @return	void
 	 */
 	function init()
 	...

Préparation

Il vous faut également modifier le formulaire par défaut afin de changer le nom de celui-ci par "editform" (du même nom que le formulaire d'édition de champs BO) et inclure un marqueur pour le onSubmit.

$this->doc->form="<form action=' ' name='editform' id='editform' method='POST' enctype='multipart/form-data' onsubmit='###RTEbo_JS_action###'>";

Ensuite il faut placer avant le premier RTE ce marqueur:

$this->content .= '###RTEbo_JS_avant###';

La fonction RTEbo

Maintenant que les déclarations sont faites il faut appeler le RTE ce qui ce fait par cette fonction:

/**
  * Fonction permettant de générer un RTE dans un module BackEnd
  *
  * @param	string		La table dans laquelle on prend l'enregistrement
  * @param	string		Le champs que l'on veux
  * @param	string		L'id de la ligne souhaitée 
  * @return	string		Retourne le code HTML du RTE
  * @see	var RTEbo_JS_avant	Variable dans laquelle est stockée le JS à mettre avant tout RTE
  */
 function RTEbo($table,$field,$uid)
 {
 	if(!$this->tceforms)
 		$this->tceforms = t3lib_div::makeInstance('t3lib_TCEforms');
 
 	$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*',$table,'uid='.$uid);
 	$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);			
 
 	$RTE = $this->tceforms->getSoloField($table,$row,$theFieldToReturn=$field);
 
 	$this->RTEbo_JS_avant = $this->tceforms->JStop(); 
 	$this->RTEbo_JS_action = implode(';', $this->tceforms->additionalJS_submit);
 
 	return   $this->tceforms->additionalJS_initial
 		.'<script type="text/javascript">'. implode(chr(10), $this->tceforms->additionalJS_pre).'</script>'
 		.$RTE
 		.'<script type="text/javascript">'.implode(chr(10), $this->tceforms->additionalJS_post).'</script>';
 }

Le final

Enfin, il faut remplacer les marqueurs précédemment placer avant d'afficher le contenu:

$this->content = preg_replace('/###RTEbo_JS_avant###/',$this->RTEbo_JS_avant,$this->content);
$this->content = preg_replace('/###RTEbo_JS_action###/',$this->RTEbo_JS_action,$this->content);

Conclusion

Et voilà ! Vous pouvez utiliser un RTE dans un module BackEnd ! A vous de debug() les $_POST pour voir de quelle manière sont retourner les informations du RTE!

Outils personnels