Bonjour,
J'ai commencé à développer un petit wysiwyg en js sous php, jusque là pas de problème : une fonction pour mettre la iframe en designMode, une fonction pour récupérer le code html.
Le problème est le suivant : j'ai développé ceci sous forme de classe, de manière à pouvoir insérer facilement un ou plusieurs éditeurs sous la meme page. Le seul hic, c'est que je ne vois vraiment pas comment je peux faire pour assigner à la textArea le contenu de la Iframe pour plusieurs editeurs se trouvant sur la meme page. En fait je ne vois pas bien à quel moment ça doit se faire.
Je sais bien qu'on est sur un forum javascript et pas php, mais bon le problème se situe au niveau du code JS
Voici le code de ma classe (editeur.inc.php), sans barre d'outils :
<script language="JavaScript" type="text/javascript">
function iniEditor(parametre){
var champ=parametre;
var format = "html";
IE = window.ActiveXObject ? true : false;
MOZ = window.sidebar ? true : false;
if(IE) edoc = window.frames[champ].document;
if(MOZ) edoc = document.getElementById(champ).contentDocument;
if(!IE && !MOZ){
alert('Votre navigateur n\'est pas compatible avec ce système d\'éditeur WYSIWYG !');
return;
}
if(edoc.designMode != 'On') edoc.designMode = 'On';
if(!edoc.body){
setTimeout('iniEditor(\"'+ champ +'\")', 20);
} else {
edoc.body.innerHTML = document.getElementById(champ + '_content').value;
}
}
function getEditorContent(parametre){
var champ=parametre;
if(IE) edoc = window.frames[champ].document;
if(MOZ) edoc = document.getElementById(champ).contentDocument;
document.getElementById(champ+'_content').value = edoc.body.innerHTML
}
</script>
<?
class Editeur{
var $name,
$value,
$width,
$height;
#################################### Constructeur de la classe
function Editeur($name,$value){
$this->name=$name;
$this->value=$value;
}// fin du constructeur
################################### Afficher l'éditeur
function show(){
echo '
<TEXTAREA id='.$this->name.'_content style=" " name='.$this->name.'>
'.$this->value.'
</TEXTAREA>
<IFRAME id='.$this->name.' src="about:blank" frameBorder=no></IFRAME>
<script>iniEditor(\''.$this->name.'\');</script>
';
}
###################################
}// fin de la classe
?>
Et pour ma page html :
<? include "editeur.inc.php"; ?>
<form action="editeur.php" method="post" >
<?
$edt=new Editeur('editeur1','<strong>texte en gras</strong>');
$edt->show();
$edt2=new Editeur('editeur2','<em>texte en italique</em>');
$edt2->show();
?>
<input name="" type="submit">
</form>
Je sais bien qu'il faudrait que je lance la fonction getEditorContent pour mettre à jour la valeur de la textArea, mais je ne peux pas le faire dans le onSubmit du formulaire dès qu'il y a plus d'un éditeur sur la page, et de plus, la classe deviendrait non portable dans un formulaire quelconque.
J'espère m'être expliquée comme il faut lol
J'ai mis la source ici :
[ Lien ] ce sera peut etre plus visible
Merci d'avance 