[Javascript] Problème TinyMCE.getContent()

Résolu/Fermé
drazx974 Messages postés 48 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 - 3 mars 2009 à 12:46
drazx974 Messages postés 48 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 - 10 mars 2009 à 07:14
Bonjour,
Cela fait plusieurs jours que je cherche pourquoi je ne peux pas récupérer le contenu de tinyMCE et j'en suis arrivé à la conclusion que la ligne qui pose problème est le TinyMCE.getContent()

Mais peux être que je me trompe, pouvez vous me dire ce qui cloche avec mon code s'il vous plaît, je m'arrache les cheveux avec cette histoire depuis un petit moment.

index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TinyMCE : exemple 2</title>
<script type="text/javascript" src="tiny_mce/tiny_mce.js"></script>
<script type="text/javascript" src="dev_script.js"></script>
</head>
<body>
<input type="button" value="Lancer TinyMCE" onclick="lanceTinyMCE();" /> - <input type="button" value="Fermer TinyMCE" onclick="closeTinyMCE();" />
<div id="myTinyMCE"></div>
</body>
</html>


dev_script.js
tinyMCE.init({
mode : "none",
theme : "advanced",
language: "fr",
width:"650px",
relative_urls : false,
height:"500px",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_path_location : "bottom",
});
function lanceTinyMCE()
{
tinyMCE.execCommand("mceAddControl", false, "myTinyMCE");
}
function closeTinyMCE()
{
tinyMCE.getContent();
tinyMCE.execCommand("mceRemoveControl", false, "myTinyMCE");
}

6 réponses

drazx974 Messages postés 48 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 8
6 mars 2009 à 19:17
lol oui oui j'ai un name sur mon textarea, mais par précaution je re-vérifirais au cas où ^^
Je précise que le code que je donne au début c'est mon code de teste pour le vrai site.

PS:Où as-tu eu la réponse par rapport au getInstanceById[...]innerHTML ?
2
vindicien Messages postés 131 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 22 février 2011 33
9 mars 2009 à 11:26
Salut !!!
Ecoute cette solution je l'ai trouvé il y a quelques temps sur google je ne sais plus d'ou ca vient exactement.

Moi je travaille en textarea et non en div, ça semble etre la seule différence.
	tinyMCE.init({
		// General options
		mode : "textareas",
		theme : "advanced",
          .........


Tu peux éventuellement juste essayer un "escape" en javascript lors de l'envoie de test données
escape(tinyMCE.getInstanceById('id_de_ton_editeur').getBody().inner­HTML) 



Moi j'enregistre le contenu directement en base en Ajax. Je t'envoie ma méthode si ca peut t'aider :

HTML
<table id="div_add">
	<tr><td colspan="2">CREER UN NOUVEAU MESSAGE</td>
	<tr><td colspan="2">Titre : <input type="text" id="titre"></td>
	<tr><td colspan="2">Contenu :</td></tr>
	<tr><td colspan="2"><textarea id="new_predef" name="new_predef"></textarea></td></tr>
	<tr>
              <td onclick="masquer_standard()" class="entete" >Retour</td>
	      <td onclick="save_standard()" class="entete" align="right">Ajouter</td>
	</tr>
</table>


Javascript

function save_standard()
{
if(document.getElementById("titre").value == "")
	{
	document.getElementById("titre").value = window.prompt("Vous n'avez pas saisi de titre, veuillez entrer un titre SVP","titre...");
	}
	else
	{
ajouter_predef_en_base(document.getElementById("titre").value,tinyMCE.getInstanceById('new_predef').getBody().innerHTML);
	}
}

var xhr = null; 
var d;
				
function getXhr(){
  if(window.XMLHttpRequest) // Firefox et autres
  xhr = new XMLHttpRequest(); 

 else if(window.ActiveXObject)
 { // Internet Explorer 
 
           try {
	         xhr = new ActiveXObject("Msxml2.XMLHTTP");
         	} 
       
           catch (e) {
           	xhr = new ActiveXObject("Microsoft.XMLHTTP");
        	}
 } 
				
else 
 { // XMLHttpRequest non supporté par le navigateur 
		   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		   xhr = false; 
 } 
}	

function ajouter_predef_en_base(titre,predef)
{
getXhr();
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function()
{
    // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    if(xhr.readyState == 4 && xhr.status == 200)
    {
        tinyMCE.getInstanceById('new_predef').getBody().innerHTML = "";
         //et tu mets les traitements que tu veux également faire.
         //Cette me permet de rajouter des messages en base sans changer de page.
    }
}

// Ici on va envoyer en post dans le fichier ajax.php
xhr.open("POST","ajax.php",true);
// ne pas oublier ça pour le post
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
xhr.send("titre="+escape(titre)+"&predef="+escape(predef));
}



PHP
...
$requete = mysql_query("INSERT INTO predef(`id`,`id_user`,`titre`,`contenu`,`place`) values (NULL,'".$_SESSION['user']."','".$_POST['titre']."','".addslashes(htmlentities($_POST['predef']))."',".($sql[0]+1).")");
...

1
Essaies ca peut être :

tinyMCE.getInstanceById('id_de_ton_editeur').getBody().innerHTML

En tout cas c'est ce que j'utilise ;-)
Bonne journée
0
drazx974 Messages postés 48 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 8
6 mars 2009 à 11:38
Génial, merci beaucoup, maintenant je peux récupérer mon contenu. Par contre le problème c'est qu'il n'est pas envoyé.

j'ai mis dans un OnSubmit sur mon formulaire
document.getElementById('id_de_mon_textarea').innerHTML = tinyMCE.getInstanceById('id_de_mon_div').getBody().inner­HTML
, une alerte pour vérifier le contenu du textarea (qui fonctionne) mais l'envoi du textarea est vide.

Je ne comprend pas où ça coince puisque le onsubmit c'est justement pour faire des manip avant l'envoi du formulaire.

Je posterais les sources quand je retournerais au boulot.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut salut !!
Pour ton formulaire, as tu un "name" pour ta textarea ?
Lorsque tu transmets ton formulaire les $_POST[''] sont ceux des "name" des éléments du formulaire, pas des "id".
Par exemple $_POST['nom_de_ma_textarea'] récupèrera la textarea du formulaire : <textarea name="nom_de_ma_textarea"></textarea>

Si elle est juste définie par un "id" c'est donc normal que tu ne réceptionne rien du tout.
0
drazx974 Messages postés 48 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 8
10 mars 2009 à 07:14
C'est bon ça fonctionne niquel, avec le textarea. Avec tout se que j'avais essayé je commençais à ne plus y croire.
Mais pourquoi le getContent ne fonctionne pas ?

Enfin bref je vais enfin pouvoir avancer un peu. Merci Beaucoup
0