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);
}
}
ckeditor添加自定义按钮整合swfupload实现批量上传图片的更多相关文章
- 调用KEditor批量上传图片
调用KEditor批量上传图片: <script charset="utf-8" src="/Keditor/kindeditor.js">< ...
- CkEditor批量上传图片(java)
CKEditor上传视频CKEditor批量上传图片flvplayer.swf播放器CKEditor整合包(v4.6.1) ------------------------------------ 最 ...
- ecshop编辑器FCKeditor修改成KindEditor编辑批量上传图片
ecshop一直使用的编辑器是fck,这个不用多说,相信很多朋友用的很悲剧吧,特别是图片不能批量上传图片. 今天小编就分享一下怎么换掉fck,放上实用的kindeditor,最新ecshop版 ...
- CKEditor和CKFinder整合实现上传下载功能
CKEditor与CKFinder整合并实现文件上传功能 事先说明:此整合的是java版本号的, 用到的有:jsp + ckeditor + ckfinder (没有servlet 及其他框架技术) ...
- 使用WebUploader客户端批量上传图片,后台使用springMVC接收实例
使用WebUploader客户端批量上传图片,后台使用springMVC接收实例 我是搞Java后台的,因为最近主管让用webUploader写客户端,但是在网上找了很多,能够复制就能用的并没有几个, ...
- 依赖弹出框lhdaiglog的基于WebUploader批量上传图片
初始上传界面 //链接添加弹窗 html代码段↓ var msgcontent = ""; msgcontent += '<ul class="linkAddBox ...
- -Android -线程池 批量上传图片 -附php接收代码
(出处:http://www.cnblogs.com/linguanh/) 目录: 1,前序 2,类特点 3,用法 4,java代码 5,php代码 1,前序 还是源于重构,看着之前为赶时间写着的碎片 ...
- CKEditor与CKFinder整合 MVC3
今天偶然看到一篇关于 CKEditor与CKFinder整合文章,心想有一段时间没有使用这种东西了.于是乎自己动手亲自体验了一下,本以为简单但在东西编写的过程发现了很多没有遇见毛病. 所以记录一下自己 ...
- 使用plupload绕过服务器,批量上传图片到又拍云
本文最初发布于我的个人博客:Jerry的乐园 综述 论坛或者贴吧经常会需要分享很多图片,上传图片比较差的做法是上传到中央服务器上,中央服务器再转发给静态图片服务器.而这篇文章讲介绍如何使用pluplo ...
随机推荐
- C# 未安装Office环境下使用NPOI导出Excel文件
1.NuGet直接安装NPOI程序包: 2. using NPOI.XSSF.UserModel; 3.导出Excel代码: private void TsbExport2ExcelClick(obj ...
- Java_异常处理(Exception)
异常:Exception try{ //捕获异常 }catch{ //处理异常 } 异常处理机制: 1.在try块中,如果捕获了异常,那么剩余的代码都不会执行,会直接跳到catch中, 2.在try之 ...
- 钉钉机器人集成Jenkins推送消息模板自定义发送报告
一.由于公司同样也使用了钉钉.那么在做Jenkins集成自动化部署的时候,也是可以集成钉钉的. 那种Jenkins下载钉钉插件集成,简单设置就可以完成了.我们今天要做的是,定制化的发送消息. 钉钉推送 ...
- Carte作为Windows服务
有一些用例将Carte作为Windows服务运行: 当使用命令窗口运行Carte实例时,任何人都会错误地关闭实例并且Carte将关闭. Carte.bat命令窗口与调用批处理文件的用户会话相关联,需要 ...
- Oracle数据库学习(一):虚拟机下Oracle Linux的安装与配置
这篇博文主要以图片的形式讲述Oracle Linux在虚拟机下的安装与配置 一.前期虚拟机安装ISO文件的配置 1.创建新的虚拟机 2.选择“自定义(高级)”选项,下一步,默认“虚拟机硬件兼容性”或选 ...
- Struts2 漏洞系列之S2-001分析
0x00 前言 最近在学习java的相关漏洞,所以Struts2的漏洞自然是绕不开的.为了更好的理解漏洞原理,计划把Struts2所有的漏洞自己都做一个复现.并且自己去实现相关的POC.相关的环境 ...
- c# 获取项目根目录方法
编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 ...
- Mac 10.12安装Git管理工具SourceTree
说明:Git的GUI工具应该是这款最好用. 下载: (链接: https://pan.baidu.com/s/1mhRr35Y 密码: vv67)
- 祝福csdn回望2014,展望2015 大致可以这样总结和展望
祝福CSDN回望2014,展望2015 大致可以这样总结和展望 回望2014,大致可以这样总结: 从寻觅一架飞机开始,到寻觅另一架飞机结束,中间觅了几天金正恩. 全年都在寻觅收钱的人.送钱的人和带着钱 ...
- 搭建类似生产环境的RAC
install the necessary packages yum install -y 创建组.用户和目录 创建用户组 groupadd -g 2000 oinstallgroupadd -g 2 ...