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" />
