5

我发布这个是因为这可能对那些不知道如何在正常和内联编辑模式下向 ckeditor 显示保存图标的人有所帮助。我正在寻找一个简单的保存插件,但找不到与 ckeditor 4.2.1 一起使用的插件。我决定自己做。在我的回答中,您会找到插件的代码以及谷歌驱动器下载链接。此下载包含保存图标以及加载 gif 图标。

该插件将在工具栏上添加一个保存按钮。单击此按钮将向服务器触发异步发布请求。在请求期间,保存按钮将显示一个动画 ajax 加载器。

4

1 回答 1

11

下载工作插件: https ://docs.google.com/file/d/0B0dQ8h7Cze23cUJGb2dJM1h2LWM/edit?pli=1

该插件使用 jquery,但您可以使用纯 javascript 轻松重写它!确保在包含 ckeditor 之前将 jquery 包含到您的页面中

首先在 config.js 文件中注册插件(只需在 config.js 文件的末尾添加这些行)

config.extraPlugins = 'savebtn';//savebtn is the plugin's name
config.saveSubmitURL = 'http://server/link/to/post/';//link to serverside script to handle the post

现在我们准备将插件添加到ckeditor。下载插件(参见上面的 google drive 下载链接)并在您的 ckeditors 插件文件夹中提取 zip 文件。(下载包含以下脚本以及使用的图标)

而已。该插件现在应该可以工作了!

作为参考,我在这个答案的底部包含了源代码(plugin.js)。如果您不知道发生了什么,我建议您阅读评论。此答案的代码中的注释与实际插件文件中的注释略有不同。最新的评论可以在这里找到。业务逻辑完全相同。

插件.js

CKEDITOR.plugins.add( 'savebtn', {
    icons: 'savebtn',
    init: function( editor ) {
        //add a new command to the editor. 
        //We give the command a name 'savecontent', 
        //so we can  reference it later. 
        editor.addCommand( 'savecontent', {
            //this is the business logic of our 'savecontent' command. 
            //this function gets executed when clicking the button.
            //you can change/replace the logic of this function  
            //according to your own needs.
            exec : function(editor){

                //get the text from ckeditor you want to save
                var data = editor.getData();

                //get the current url (optional)
                var page = document.URL;

                //path to the ajaxloader gif
                loading_icon=CKEDITOR.basePath+'plugins/savebtn/icons/loader.gif';

                //css style for setting the standard save icon. 
                //We need this when the request is completed.
                normal_icon=$('.cke_button__savebtn_icon').css('background-image');

                //replace the standard save icon with the ajaxloader icon. 
                //We do this with css.
                $('.cke_button__savebtn_icon').css("background-image", "url("+loading_icon+")");

                //Now we are ready to post to the server...
                $.ajax({
                    url: editor.config.saveSubmitURL,//the url to post at... configured in config.js
                    type: 'POST', 
                    data: {text: data, id: editor.name, page: page},//editor.name contains the id of the current editable html tag
                })
                .done(function(response) {
                    console.log("success");
                    alert('id: '+editor.name+' \nurl: '+page+' \ntext: '+data);

                })
                .fail(function() {
                    console.log("error");
                })
                .always(function() {
                    console.log("complete");
                    //set the button icon back to the original
                    $('.cke_button__savebtn_icon').css("background-image", normal_icon);
                });


            } 
    });


//add the save button to the toolbar. Mind that we declare command: 'savecontent'. 
//This way ckeditor knows what to do when clicking the button.

        editor.ui.addButton( 'savebtn', {
            label: 'Save',
            command: 'savecontent'
           // toolbar: 'insert'
        });


    }
});
于 2013-09-23T09:48:27.273 回答