UTROLIGT - Så lykkedes det alligevel at få metoden save_onsavecallback i TinyMCE til at fungere således at jeg kan foretage AJAX kald når jeg gemmer.
I TinyMCE.init skulle jeg sætte
...
...
save_onsavecallback : postForm,
...
...
Hvor PostForm er navnet på den funktion som foretager det egentlige AJAX-kald.
Men som tidligere nævnt er det slet ikke nødvendigt at anvende denne metode, og så kan den jo gemmes til noget andet.
Min samlede løsning for at sætte TinyMCE op til at gemme med AJAX-kald blev følgende:
I TinyMCE-mappen på stien plugins/save/editor_plugin.js åbner man filen editor_plugin.js og foretager følgende ændring i koden:
Find: "formObj.submit();"
Udskift med: "postForm(ed);"
postForm er den funktion man definerer til at foretage AJAX-kaldet. Hvis man kalder funktionen noget andet er det selvfølgelig den man skal indsætte.
Det afgørende er at det er her aktionen ved eventet "Klik på save" håndteres.
I TinyMCE.init indfører man følgende:
cleanup_on_startup : true,
cleanup: true,
debug : false,
( Husk nu at undlade det sidste komme hvis du indfører dette sidst i TinyMCE.init !!!
)
MIN funktion postForm ser således ud:
function postForm(ed){
var text = ed.getContent(); // Indhold af TinyMCE hentes
var AreaId = ed.id; // ID på textarea hentes
text = text.replace(/\+/g, "+");
text = text.replace(/\\/g, "\");
text = escape(text);
var pars = AreaId + '=' + text + '&T_ID=' + <?php echo $T_ID; ?>;
var ajax = new XMLHttpRequest();
ajax.open('POST','savetext.php',false);
ajax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
ajax.send(pars);
}
Hvor:
- Variablen er den tekst som er skrevet i TinyMCE editoren.
- Variablen AreaID er id'et på det tekstarea hvor TinyMCE er placeret. I princippet kunne man udelade denne og så i vaiable pars indføre en anden variabel til at repræsentere teksten i AJAX-kaldet.
- Som nævnt er variablen pars den data som skal overføres med AJAX-kaldet. Alt dette med T_ID og php-kode er udelukkende fordi JEG skal bruge det at identificere teksten i min DB. Den er ikke nødvendig for andre.
- Bemærk at jeg anvender POST-metoden - IKKE GET-metoden. Dette er fordi mængden af data i POST kan være næsten ubegrænset, mens der er begrænsninger på størrelsen af URL ved anvendelse af GET. Indholdet i TinyMCE kan jo nemt blive ret stort!!!
- savetext.php er simpelthen navnet på den PHP-fil JEG anvender til at gemme teksten i DB.
HVIS man havde ønsket at anvende JQuery i stedet skulle man foretage følgende ændring i postForm:
Alt hvad der har med AJAX at gøre i postForm skal udskiftes med:
var myAjax = new Ajax.Request(
'savetext.php',
{
method: 'post',
postBody: pars,
onComplete: showResponse
}
);
Der findes faktisk en JQuery udgave af TinyMCE.
BEMÆRK at denne løsning kun fungerer for version 3.4.7 (mere generelt 3.4.x). I versionen 3.3.x er det lidt anderledes. I version 3.2.x og tidligere er det FULDSTÆNDIG anderledes. Læs om løsningen for version 3.3.x og tidligere på siden
http://www.tinymce.com/forum/viewtopic.php?id=5519 .
MVH Christian