Pour eviter d'initialiser plusieurs fois TinyMce dans AMS par exemple, il suffit de modifier le fichier
/class/xoopseditor/tinymce/tinymce.php
Citation :
class TinyMCE {
var $rootpath;
var $config = array();
var $setting = array();
static $LastOfElementsTinymce="";
static $ListOfElementsTinymce=array();
// PHP 5
Constructor function __construct($config){
$this->setConfig($config);
$this->rootpath = $this->config["rootpath"] . "/tinymce/jscripts/tiny_mce";
$this->xoopsPlugins = $this->get_xoopsPlugins();
self::$LastOfElementsTinymce=$this->config["elements"];
self::$ListOfElementsTinymce[]= self::$LastOfElementsTinymce;
}
...
...
...
function render()
{
static $isTinyMceJsLoaded = false;
$this->init();
if (self::$LastOfElementsTinymce!=$this->setting["elements"]){
$ret = "\n<!-- 'tiny_mce.js' SCRIPT NOT YET ".$this->setting["elements"]." -->\n";
return $ret;
}
else {
$this->setting["elements"]=implode(",",self::$ListOfElementsTinymce);
}
En gros on empile les noms des elements dans un tableau static dans la classe TinyMCE (ListOfElementsTinymce), en conservant le dernier element crée $LastOfElementsTinymce.
Lorsqu'il s'agira de produire le code HTML dans la fonction render, on botte en touche tant que c'est pas le dernier, quand c'est le dernier, on charge "elements" avec la liste des elements stocké.
---------------
Limitation ou bug possible!
ca ne marche pas si on change les options de tinymce entre les différentes instances (je ne suis pas sûr que ca marche)
si on fait plusieurs render avant d'envoyer la page finale (encore que ... pas sûr non plus)