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

ckeditor添加自定义按钮整合swfupload实现批量上传图片
给ckeditor添加自定义按钮,由于ckeditor只能上传一张图片,如果要上传多张图片就要结合ckfinder,而ckfinder是收费的,所以就想通过自定义按钮整合swfupload实现一次上传多张图片的功能
首先下载并安装ckeditor。
下载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,代码如下:
下面代码是在页面上写的,当然可以根据自己的需求来定,写在什么位置

//编辑框初始化上传图片的回调----------自定义按钮插件
//上面有个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);
    }
}

时间: 2024-10-12 10:35:57

ckeditor添加自定义按钮整合swfupload实现批量上传图片的相关文章

CKEditor 添加自定义按钮

1.下载ckeditor,我这里下载的是CKEditor 3.6.2. 2.里边有压缩过的代码及源码,源码所在目录为_source,还有一些使用例子,具体不做累述 此处主要讲的是在使用过程需要添加自定义按钮. 2. 比如我要添加“插入代码”的按钮,起名为code.在ckeditor/plugins下新建文件夹code,在code文件夹里加入一个小图片如code.gif,然后在code文件夹里新建plugin.js文件,内容如下: //一键排版(function () { b = 'format_

转:织梦ckeditor添加自定义按钮,实现自定义样式

1.首先打开/include/ckeditor 注:这里为本站目录. 2.打开ckeditor文件夹下的ckeditor.js文件,查找代码: n('Bold',p.bold,'bold',o.coreStyles_bold); 在其后添加代码:n('Custom',p.custom,'custom',o.coreStyles_custom); 注:这里的Custom为自定义,但必须第一个首字母大写,后面全为小写. 3.继续在ckeditor.js中查找i.coreStyles_bold={el

ecshop编辑器FCKeditor修改成KindEditor编辑批量上传图片

ecshop一直使用的编辑器是fck,这个不用多说,相信很多朋友用的很悲剧吧,特别是图片不能批量上传图片. 今天小编就分享一下怎么换掉fck,放上实用的kindeditor,最新ecshop版本的哦.方法如下: 1.官方网站下载最新版kindeditor 现在最先版本的是:kindeditor4.1.4,官方网址:http://www.kindsoft.net 2.上传解压 上传下载的压缩文件到你的网站include目录下,解压kindeditor4.1.4,将其文件夹名称改为:kindedit

.Net ajax异步批量上传图片

利用iframe实现ajax异步批量上传图片,WebForm1页面 <form action="WebForm1.aspx" target="dynamic_creation_upload_iframe" method="post" enctype="multipart/form-data"> <input type="file" name="upload1" />

java 使用框架Spring MVC批量上传图片

java 使用框架Spring MVC批量上传图片 运行环境:jdk1.8.0_17+tomcat 8 + spring:4.3.4+mybatis:3.2.7+ eclipse ide 2018+maven管理 最近写项目时候用到上传图片文件等功能之前写过没有总结,以及记录等,今天总结下写的批量上传图片功能 前段只需要把所有的选择的图片提交上来即可,后台会逐个处理,并且会在服务器或者当前电脑自己新建一个存放图片的文件夹,在application.properties配置里面你可以指定你所存放图

php批量上传图片并把图片名放入数据库

    前几天工作中要做这样一个功能,有八百多个系统 生成的会员:给这八百多个系统会员上传图片:然后把图片名放入数据库. 第一步: 第一步肯定是首先把图片上传到对应的图片目录下,直接用框架中已经有的上传类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!--?php                try {                     $upload=new Upload();       

-Android -线程池 批量上传图片 -附php接收代码

(出处:http://www.cnblogs.com/linguanh/) 目录: 1,前序 2,类特点 3,用法 4,java代码 5,php代码 1,前序 还是源于重构,看着之前为赶时间写着的碎片化的代码,甚是悲剧,臃肿且长,其实重构也是一个提高的过程,重构过程中会接触到更多的知识点.至少,我现在意识到,那怕是听过.有这样的意识而没真正动过手都是不行的,多线程并发最好使用线程池而不要一味地 new Thread(...).start().下面我分享个自己刚写好的图片批量上传类,顺带serve

关于django批量上传图片

本来想一张一张上传的,但是明显会对客户造成不必要的麻烦,所以如果前台一次性上传五张十张的话,那就简单的多. 但是后台我数据库对于图片存储的字段只有一个,不可能有多少张照片就要多少个字段来存储.也就是说,1:我每次只能在后台存一张到数据库,2:在前台展示的时候我直接可以循环这一个字段来展示我的图片 那么这就涉及到一个列表跟数据循环存储的东西了 用到字典是因为我每张图片还有各自的图片描述,这两个信息时同时提交跟保存的.我把图片保存的url跟他的描述做成列表,然后再循环保存就搞定了. 这里主要用到的就

ASP.net(C#)批量上传图片(完整版)

摘自:http://www.biye5u.com/article/netsite/ASPNET/2010/1996.html 这篇关于ASP.Net批量上传图片的文章写得非常好,偶尔在网上看到想转载到这里,却费劲了周折.为了更新这篇文章,我用了近半个小时,网上的转载都残缺不全,希望大家有用的参考一下,作者写的非常好. 因本网站上传图片的需要,参考很多成熟的经验,在ASP.net平台上使用C#语言,做了这一自动批量上传图片的.ASPX文件,并经调试成功,在本网站上使用,现发出来供大家参考,也希望高