2012-12-17 14 views
9

sto usando CKEditor per consentire agli utenti di INLINE modificare il contenuto di una pagina, una volta loggatoCome posso salvare il contenuto dell'editor in linea sul server? .

so di poter accedere ai dati utilizzando:

var data = CKEDITOR.instances.editable.getData(); 

ma non so come inviare i dati a uno script in modo da poter aggiornare il database. Sarebbe bello se lo script fosse eseguito ogni volta che qualcuno ha deselezionato un elemento contenteditable ... ma non so se questo sia possibile.

Qualsiasi consiglio sarebbe fantastico! :)

Il mio sito è stato creato usando php/mysql.

risposta

20

Qualcosa di simile a questo:

CKEDITOR.disableAutoInline = true; 

CKEDITOR.inline('editable', { 
    on: { 
     blur: function(event) { 
      var data = event.editor.getData(); 
      // Do sth with your data... 
     } 
    } 
}); 

Si noti che questo non funziona con le altre interazioni come: utente chiamato editor.setData() o chiusi di utenti la pagina web durante la modifica. I contenuti saranno persi in questi casi. Se fossi in te, preferirei controllare periodicamente la presenza di nuovi dati:

CKEDITOR.disableAutoInline = true; 

var editor = CKEDITOR.inline('editable', { 
    on: { 
     instanceReady: function() { 
      periodicData(); 
     } 
    } 
}); 

var periodicData = (function(){ 
    var data, oldData; 

    return function() { 
     if ((data = editor.getData()) !== oldData) { 
      oldData = data; 
      console.log(data); 
      // Do sth with your data... 
     } 

     setTimeout(periodicData, 1000); 
    }; 
})(); 
+1

È possibile chiamare ckeditor su una classe specifica anziché su un ID, in quanto ho più di un'area su una pagina da modificare. –

+0

Aggiungi 'contenteditable =" true "' ai tuoi elementi e imposta 'CKEDITOR.disableAutoInline = false'. – oleq

+0

allora come ottengo ckeditor a sparare sulla sfocatura senza: 'CKEDITOR.inline ('titolo', { \t \t \t \t \t il: { \t \t \t \t \t \t sfocatura: la funzione (evento) {' ' –

1
+0

ok, quindi come fai a sapere che cosa "editor" è quando hai molti elementi contenteditable = true nella pagina, ma non sai quando uno di loro sarà attivo (o forse non lo fai? so anche quali elementi saranno in fase di inizializzazione perché alcuni potrebbero essere aggiunti dinamicamente.) utilizzando CKEDITOR.on non sembra funzionare (gli eventi non vengono mai chiamati) – Michael

+0

Cosa ho fatto, creo gli editor in modo dinamico, a seconda dei dati, a volte uno, a volte dieci e così via. In questo scenario, ho avuto un'istanza "editor" nel mio script. Non era globale "CKEDITOR.on" ma istanza esatta "editor.on". Quindi sono stato in grado di definire esattamente l'evento "sfocatura" esattamente su ogni istanza. Tipicamente era una semplice funzione che invia un messaggio "prendi dati (editor.getData()) e invialo" all'applicazione della parte che parla con un server. –

3
CKEDITOR.inline('editable' ,{ 
     on:{ 
      blur: function(event){ 
       if (event.editor.checkDirty()) 
        console.log(event.editor.getData()); 
      } 
     } 
    }); 

Prova questa.

Problemi correlati