2012-12-17 2 views
9

Ich CKeditor mit Benutzern zu ermöglichen, die Inhalte auf einer Seite in einmal angemeldet Inline bearbeitenWie speichere ich Inline-Editor-Inhalte auf dem Server? .

Ich weiß, dass ich die Daten zugreifen kann:

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

aber ich weiß nicht, wie man Senden Sie die Daten an ein Skript, damit ich die Datenbank aktualisieren kann. Es wäre cool, wenn das Skript jedes Mal ausgeführt würde, wenn jemand ein contenteditable Element abgewählt hätte ... aber ich weiß nicht, ob das überhaupt möglich ist.

Alle Tipps wären toll! :)

Meine Website wird mit PHP/MySQL erstellt.

Antwort

20

Etwas wie folgt aus:

CKEDITOR.disableAutoInline = true; 

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

Beachten Sie, dass diese nicht mit anderen Interaktionen wie funktioniert: Benutzer editor.setData() oder Benutzer aufgerufen geschlossen die Webseite während der Bearbeitung. Inhalte gehen in solchen Fällen verloren. Wenn ich Sie wäre, würde ich eher in regelmäßigen Abständen auf neue Daten prüfen:

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

Ist es möglich, ckeditor auf eine bestimmte Klasse anstelle einer ID zu nennen - wie ich mehr als einen Bereich auf einer Seite zu bearbeiten haben. –

+0

Fügen Sie 'contenteditable =" true "' zu Ihren Elementen hinzu und setzen Sie 'CKEDITOR.disableAutoInline = false'. – oleq

+0

dann wie kann ich ckeditor auf Blur Feuer erhalten, ohne: 'CKEDITOR.inline ('Überschrift', { \t \t \t \t \t auf: { \t \t \t \t \t \t Unschärfe: function (event) {' ' –

1

Es sieht aus wie „Unschärfe“ Ereignis könnte Ihnen helfen: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#event:blur

+0

ok, also woher weißt du, was "editor" ist, wenn du viele contenteditable = true Elemente auf der Seite hast, aber du weißt nicht, wann einer von ihnen aktiv sein wird (oder vielleicht nicht Ich weiß sogar, was die Elemente bei der Initialisierung sein werden, weil einige dynamisch hinzugefügt werden.) mit CKEDITOR.on scheint nicht zu funktionieren (Ereignisse werden nie aufgerufen) – Michael

+0

Was ich getan habe, ich erstelle Redakteure dynamisch, abhängig von den Daten, manchmal eins, manchmal zehn und so weiter. In diesem Szenario hatte ich eine "Editor" -Instanz in meinem Skript. Es war nicht global "CKEDITOR.on" sondern exakte Instanz "editor.on". So konnte ich exaktes "Unschärfe" -Ereignis genau für jede Instanz definieren. In der Regel war es eine einfache Funktion, die eine Nachricht "take data (editor.getData()) sendet und an die Teileanwendung sendet, die mit einem Server spricht. –

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

bereits.

Verwandte Themen