Afficher un RTE dans un module BackEnd à partir de Typo3 4.4

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_apres;	// Javascript à placer après les RTE
 	var $RTEtmp;            // Tableau temporaire des différents RTE
 
 	/**
 	 * 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 le onSubmit.

$this->doc->form="<form action=' ' name='editform' id='editform' method='POST' enctype='multipart/form-data' onsubmit='return TBE_EDITOR.checkSubmit(1);'>";

Avec Typo3 4.4 il faut absolument générer les RTE avant d'appeler la fonction:

$this->content.=$this->doc->startPage($LANG->getLL('title'));

Ceci est du au fait que des javascripts sont inclus automatiquement par cette fonction.

Pour générer les RTE il faut appeler cette fonction:

$this->RTEbo($tx_monplugin_matable, $mon_champs, $mon_uid);

On peut donc appeler plusieurs RTE pour un rendu utltérieur:

$this->tmpRTE[1] = $this->RTEbo($tx_monplugin_matable1, $mon_champs1, $mon_uid1);
$this->tmpRTE[2] = $this->RTEbo($tx_monplugin_matable2, $mon_champs2, $mon_uid2);

Il suffit ensuite d'appeler ces RTE à l'endroit souhaité dans le formulaire.

La fonction RTEbo

Maintenant que les déclarations sont faites il faut appeler le RTE avec cette fonction:

/**
  * Fonction permettant de générer un RTE dans un module BackEnd
  *
  * @author Matthieu GAUTHIER <matthieu@oblady.fr>
  *
  * @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
  * @see	var RTEbo_JS_apres	Variable dans laquelle est stockée le JS à mettre apres 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->printNeededJSFunctions_top();
    $this->RTEbo_JS_apres = $this->tceforms->printNeededJSFunctions();
 
    return $RTE;
}

Conclusion

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


Cas particulier

Il est parfois nécessaire d'ajouter à la main la CSS du RTE au début du module:

<link rel="stylesheet" type="text/css" href="/typo3/sysext/t3skin/rtehtmlarea/htmlarea.css" />
Outils personnels

Formation Typo3 à Paris
Boite Oblady