2012-12-17 10 views
9

Używam CKEditor aby umożliwić użytkownikom inline edycji treści na stronie po zalogowaniu się wJak zapisać zawartość edytora wbudowanego na serwerze? .

wiem, że mogę uzyskać dostęp do danych za pomocą:

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

ale nie wiem jak wyślij dane do skryptu, aby zaktualizować bazę danych. Byłoby fajnie, gdyby skrypt działał za każdym razem, gdy ktoś odznaczył element contenteditable ... ale nie wiem, czy to nawet możliwe.

Wszelkie wskazówki będą świetne! :)

Moja strona jest zbudowana przy pomocy php/mysql.

Odpowiedz

20

coś takiego:

CKEDITOR.disableAutoInline = true; 

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

Zauważ, że to nie będzie działać z innymi interakcjami takimi jak: użytkownik zwanych editor.setData() lub użytkownika zamknięte strona internetowa podczas edycji. W takich przypadkach zawartość zostanie utracona. Gdybym był tobą, wolałabym okresowo sprawdzać nowych danych:

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

Czy można wywołać ckeditor na konkretnej klasie, zamiast identyfikatora - ponieważ mam więcej niż jeden obszar na stronie do edycji. –

+0

Dodaj 'contenteditable =" true "' do swoich elementów i ustaw 'CKEDITOR.disableAutoInline = false'. – oleq

+0

wtedy jak mogę CKEditor do strzelania bez rozmycia: 'CKEDITOR.inline ('nagłówek', { \t \t \t \t \t na: { \t \t \t \t \t \t rozmycie: function (event) {' ' –

1

Wygląda na to „plama” zdarzenie może pomóc: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#event:blur

+0

ok, więc skąd wiadomo, czym jest "redaktor", gdy na stronie jest dużo contenteditable = true elementów, ale nie wiadomo, kiedy jeden z nich będzie aktywny (a może nie. t nawet wiedzieć, jakie elementy będą przy inicjalizacji, ponieważ niektóre mogą być dodawane dynamicznie.) używanie CKEDITOR.on nie działa (zdarzenia nigdy nie są wywoływane) – Michael

+0

Co zrobiłem, tworzę edytory dynamicznie, w zależności od danych, czasami jeden, czasem dziesięć i tak dalej. W tym scenariuszu w swoim skrypcie miałem instancję "edytora". Nie był to globalny "CKEDITOR.on", ale dokładna instancja "editor.on". Tak więc udało mi się dokładnie zdefiniować zdarzenie "rozmycie" dokładnie na każdym wystąpieniu. Zwykle była to prosta funkcja, która wysyła komunikat "weź dane (editor.getData()) i wyślij je" do aplikacji części, która mówi z serwerem. –

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

Spróbuj tego.

Powiązane problemy