PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > 编程杂谈 > 正文

    ckeditor添加自定义按钮整合swfupload实现批量上传图片

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:给ckeditor添加自定义按钮,由于ckeditor只能上传一张图片,如果要上传多张图片就要结合ckfinder,而ckfinder是收费的,所以就想通过自定义
    给ckeditor添加自定义按钮,由于ckeditor只能上传一张图片,如果要上传多张图片就要结合ckfinder,而ckfinder是收费的,所以就想通过自定义按钮整合swfupload实现一次上传多张图片的功能
    1、首先下载安装ckeditor。
    2、下载swfupload解压拷贝到对应的文件目录下
    3、自定义工具栏按钮:
    我们可以自定义ckeditor工具栏要显示的按钮,工具栏按钮定义可以参考这里
    现在我们需要向工具栏添加一个自定义功能的按钮。ckeditor工具栏中的每个按钮都是作为插件定义在ckeditor\plugins\ 目录中。我们在ckeditor\plugins\中创建一个新文件夹imagedef。在imagedef文件夹内,我们创建一个plugin.js文件,它的代码如下:
    CKEDITOR.plugins.add(
        "imagedef",
          {
              requires:["dialog"], //当按钮触发时弹出对话框
            init:function (a)
              {
                a.addCommand("imagedef", new CKEDITOR.dialogCommand("imagedef"));
                  a.ui.addButton(
                    "Imagedef",
                    {
                        label:"图片",
                        command:"imagedef",
                        icon:this.path + "imagedef.gif"
                    });
                CKEDITOR.dialog.add("imagedef", this.path + "dialogs/imagedef.js");
            }
        }
    );
    在上面的代码中我们指定自定义按钮的图标imagedef.gif,imagedef.gif放在imagedef文件夹中。
    在imagedef文件夹下新建一个dialogs目录,在dialogs目录下新建一个imagedef.js文件,就是上面代码调用的imagedef.js文件
    CKEDITOR.dialog.add(
        "imagedef",
          function (b)
        {
            return {
             title:"图片",
                       minWidth:590,
                  minHeight:300,
                contents:[{
                        id:"tab1",
                          label:"",
                        title:"",
                        expand:true,
                          padding:0,
                        elements:[{
                                type:"html",
                                  html:initImageDlgInnerHtml() //对话框中要显示的内容,这里的代码将发在下面
                          }]
                  }],
                onOk: function(){ //对话框点击确定的时候调用该函数
                 var D = this;
                 var imes = getCkUploadImages();//获取上传的图片,用于取路径,将图片显示在富文本编辑框中
                 $(imes).each(function(){
                 D.imageElement = b.document.createElement('img');
    D.imageElement.setAttribute('alt', '');
    D.imageElement.setAttribute('_cke_saved_src', $(this).attr("src"));
    D.imageElement.setAttribute('src', $(this).attr("src"));
    D.commitContent(1, D.imageElement);
    if (!D.imageElement.getAttribute('style')){
    D.imageElement.removeAttribute('style');
    }
    b.insertElement(D.imageElement);
                 });
                },
             onLoad: function(){ //对话框初始化时调用
             initEventImageUpload(); //用于注册上传swfupload组件
             },
             onShow:function(){
             clearCkImageUpload(); //在对话框显示时作一些特殊处理
             }
              };
        }
    );
     
    接下来我们需要注册imagedef插件。原文中的给出方法是在ckeditor.js中注册,这会使以后升级新版本遇到困难。提倡使用下面的方法在config.js中注册自定义插件:
    CKEDITOR.editorConfig = function( config )
    {
        config.toolbar_Full = [                               
                  ['Source','Preview','-','Templates'],
                  ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
                         ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
                  ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],
                          '/',
                           ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
                           ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
                           ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
                           ['Link','Unlink','Anchor'],
                           ['Imagedef','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
                           '/',
                           ['Styles','Format','Font','FontSize'],
                           ['TextColor','BGColor']
                          ];
    config.resize_maxWidth = 775;
    config.removePlugins='elementspath';//去掉文本框下面出现body p 等
    config.extraPlugins="imagedef"; //注册自定义按钮
    };
     
    最后,在ckeditor中显示自定义按钮linkbutton,代码如下:
    下面代码是在页面上写的,当然可以根据自己的需求来定,写在什么位置
     
    //编辑框初始化上传图片的回调----------自定义按钮插件
    function initImageDlgInnerHtml(){ //这是在对话框中要显示的内容
    var iHtml = "<div style='float:left;width:100%'>上传到服务器上</div>" ;
    iHtml += "<div style='float:left;width:100%;' class='setUpload'>";
    iHtml += "<div style='float:left;height:24px;width:82px' class='su_img'><span id='ck_btn_id'>dssdf</span></div>";
    iHtml += "<div style='float:left' id='ck_fs_upload_progress'>未选择文件</div>";
    iHtml += "</div>";
    iHtml += "<div style='float:left;width:100%'><input id='stop_id' type='button' vlaue='终止'/><input id='ck_btn_start' class='cke_dialog_start_button_z' type='button' value='开始上传' style='float:left' onclick='ckUploadImageStart();'/></div>";
    iHtml += "<div id='ck_pic_div' style='float:left;width:100%'></div>";
    return iHtml;
    }
    上面有个cke_dialog_start_button_z样式是根据自己的需要来写的
     
    function initEventImageUpload(){ //对上传控件的注册
    ckeditorInitSwfu("ck_fs_upload_progress","stop_id","ck_btn_id");
    $("#ck_fs_upload_progress").parent().find("object").css({"height":"24px","width":"82px"});
    $("#ck_btn_start").mouseover(function(){
    $(this).css({"cursor":"hand","background-position":"0 -1179px"});
    });
    }
    function clearCkImageUpload(){ //对对话框弹出时作特殊处理
    if($("#ck_fs_upload_progress").html().indexOf(".jpg") != -1){
    $("#ck_fs_upload_progress").html("");
    }
    $("#ck_pic_div").html("");
    }
    function getCkUploadImages(){
    return $("#ck_pic_div").find("img");
    }
     
    var ckSwfu; //初始化上传控件
    function ckeditorInitSwfu(progress,btn,spanButtonPlaceHolder) {
    var uploadUrl = "${BasePath}/commodity_com/img/uploadCommodityImg.ihtml?type=1";
    //在firefox、chrome下,上传不能保留登录信息,所以必须加上jsessionid。
    var jsessionid = $.cookie("JSESSIONID");
    if(jsessionid) {
    uploadUrl += "?jsessionid="+jsessionid;
    }
    ckSwfu=new SWFUpload({
    upload_url : uploadUrl,
    flash_url : "${BasePath}/res/base/plugin/swfupload/swfupload.swf",
    file_size_limit : "4 MB",
    file_types : "*.jpg;*.png;*.gif;*.jpeg;*.bmp",
    file_types_description : "Web Image Files",
    file_queue_limit : 0,
    custom_settings : {
    progressTarget : progress,
    cancelButtonId : btn
    },
    debug: false,

    button_image_url : "${BasePath}/res/base/plugin/swfupload/button_notext.png",
    button_placeholder_id : spanButtonPlaceHolder,
    button_text: "<span class='btnText'>上传图片</span>",
    button_width: 81,
    button_height: 24,
    button_text_top_padding: 2,
    button_text_left_padding: 20,
    button_text_style: '.btnText{color:#666666;}',
    button_cursor:SWFUpload.CURSOR.HAND,

    file_queued_handler : fileQueuedCk,
    file_queue_error_handler : fileQueueError,
    file_dialog_complete_handler : fileDialogCompleteCk,
    upload_start_handler : uploadStart,
    upload_progress_handler : uploadProgress,
    upload_error_handler : uploadError,
    upload_success_handler : uploadSuccessCk,
    upload_complete_handler : uploadComplete,
    queue_complete_handler : queueComplete
    });
    };
    //开始上传图片
    function ckUploadImageStart(obj){
    ckSwfu.startUpload();
    }
    //回调重写
    function fileQueuedCk(file) {
    try {
    if($("#ck_fs_upload_progress").html().indexOf(".jpg") == -1){
    $("#ck_fs_upload_progress").html("");
    }
    var progress = new FileProgress(file, this.customSettings.progressTarget);
    progress.setStatus("Pending...");
    progress.toggleCancel(true, this);
    $(progress.fileProgressWrapper).css("display","none");
    $("#ck_fs_upload_progress").append(" "+file.name);
    } catch (ex) {
    this.debug(ex);
    }
     
    }
    //回调重写,上传成功后
    function uploadSuccessCk(file, serverData) {
    try {
    var progress = new FileProgress(file, swfu.customSettings.progressTarget);
    //progress.setComplete();
    //progress.setStatus("上传成功!");
    //progress.toggleCancel(false);
    $(progress.fileProgressWrapper).css("display","none");
    var json = eval("("+serverData+")");
    var img = '<div style="float:left;"><img picUrl="'+json.url+'" src="${BasePath!''}/'+json.url+'" style="width:80px;height:80px"/><a href="javascript:void(0)" onclick="deletePic(this)">X</a></div>';
    $("#ck_pic_div").append(img);
    $("#ck_pic_div").dragsort("destroy"); //图片排序,这里要下载dragsort插件
    $("#ck_pic_div").dragsort({ dragSelector: "div", dragBetween: true, placeHolderTemplate: "<div class='placeHolder' style='float:left'><img /><a></a></div>" });
    } catch (ex) {

    }
    }
    //回调重写,主要是设置参数,如果需要的参数没有,就清空上传的文件,为了解决下次选择会上传没有参数时的图片
    function fileDialogCompleteCk(numFilesSelected, numFilesQueued) {
    try {
    var commoNo = $("#commoNo").val();
       var brandNo = $("#brand option:selected").val();
       var catNo = $("#thirdCommon option:selected").val();
       //初始化上传图片
       if(brandNo != "" && commoNo != "" && catNo != "") {
       this.addPostParam("commoNo",commoNo);
       this.addPostParam("thirdCatNo",catNo);
       this.addPostParam("brandNo",brandNo);
       if (numFilesSelected > 0) {
    document.getElementById(this.customSettings.cancelButtonId).disabled = false;
    }
       } else {
       for(var i=0;i<numFilesSelected;i++){
       var promitId = this.customSettings.progressTarget;
       $("#"+promitId).find("*").remove();
       var fileId = this.getFile().id;
       this.cancelUpload(fileId,false);
       }
       $("#ck_fs_upload_progress").html("");
       alert("请选择分类和品牌!");
       }
    } catch (ex)  {
            this.debug(ex);
    }
    }

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-74-142-1.html