主题: kindeditor图片空间添加删除图片功能 |
作者: xieliang, 发布日期: 2013-02-28 08:27:50, 浏览数: 12403 |
这里是扩展的编辑器的插件,以前一直在用xh编辑器,后来了解到kindeditor后就“深深的”被他吸引了,因为他扩展性太强了,且还开源免费,他自带有单个图片上传和批量图片上传,还有个“图片空间”,图片空间就是在线浏览你以前上传过的图片,点击后可以直接插入到编辑器内,省去了你误删图片后在重新上传而重复的问题,这里写的是为了方便在图片空间上扩展个删除图片的功能,可以实时的预览,插入和删除。废话不说了,学习吧开始分析源码。 首先你得自己配置好kindedior编辑器,官网有详细配置教程(http://www.kindsoft.net/),这里不说了。配置好后回看到如图:
其中的那个 有一个加号的小标是单个删除图片和图片空间,有两个加号的小标是批量上传图片,这里我们扩展的是图片空间,点击上传图片,在点图片空间,就会出现以日期建立的文件夹,点击文件夹可以打开里面的以前上传的图片,我们这里要做的是:如果打开的是图片,则滑过的时候添加一个删除按钮,如果直接点击图片就还是以前的插入,如果点击删除则提示“是否删除”,确认后则直接删除这个图片(这里要结合后端进行ajax无刷新删除),且还会在硬盘上删除这个图片。 先分析下他的图片空间打开图片文件夹后的HTML结构,用firebug分析下,如图:
可以得到 div class="ke-inline=block ke-item"的容器是一个图片和名字循环出来的,他里面还有2个Div,一个是上面图片的,一个是下面名字的,如: <div class="ke-inline-block ke-item"> <div class="ke-inline-block ke-photo" style="cursor: pointer;" title="20120820091315514.jpg (8KB, 2013-02-16 05:16:53)"> <img width="80" height="80" alt="20120820091315514.jpg" src="/upload/image/20130213/20120820091315514.jpg"> </div> <div title="20120820091315514.jpg" class="ke-name">20120820091315514.jpg</div> </div> 默认的是滑过ke-inline-block的时候给自己添加一个class来变化边框的,我们该下结构,打开kindeditor的插件目录:plugins中的filemanager文件夹,这个文件夹时图片空间的扩展插件 js(如果你的kindeditor是用的kindeditor-all.js的话,就直接打开这个即可,因为这个是完全版),查找ke-inline-block ke-item,它在createView函数内,这个函数意思是创建试图,也就是缩略图,还有个详细信息createList,这里不管createList,把查找出的那改成 div = K('<div class="ke-inline-block ke-item" style="position:relative;"></div>'); 只添加了个定位的style,设置这个循环的图片,名字Div为相对定位。 var photoDiv = K('<div class="ke-inline-block ke-photo"></div>') .mouseover(function(e) { K(this).addClass('ke-on'); }) .mouseout(function(e) { K(this).removeClass('ke-on'); }); 把上面替换为 var photoDiv = K('<div class="ke-inline-block ke-photo"></div>');//创建图片div div.append(photoDiv);//插入到循环div里 div.mouseover(function(e) {//滑过这个div的时候 K(this).children().eq(0).addClass('ke-on');//给下面的第一个div也就说图片div添加ke-on data.is_photo&&K(this).children().eq(2).css("display","block");//如果是图片格式就查找当前下面的第3个标签元素设置为可见 }) .mouseout(function(e) {//划出这个循环div时 K(this).children().eq(0).removeClass('ke-on');//删除ke-on类 data.is_photo&&K(this).children().eq(2).css("display","none");//如果是图片格式设置当前下第3个标签为隐藏 }); 替换这个就是让滑过的时候把我们添加的删除按钮显示,你会说我们没有添加按钮啊,不要急,马上添加。(这里没data是后端传后来的数据,如果data.is_photo为ture说明是图片,因为还有目录类的,我们这里不对目录进行操作) 找到 div.append('<div class="ke-name" title="' + data.filename + '">' + data.filename + '</div>'); 这行,这行意思是添加图片下面的那个名字,在这个下面添加代码: if(data.is_photo){//如果是图片 var _span=K('<span class="xl_span" data-url="'+K.formatUrl(result.current_url + data.filename, 'absolute')+'" style="position:absolute;display:none;width:102px;background:#0690d2;color:#FFF;text-align:center; cursor: pointer;line-height:20px;bottom:-3px;left:0;">删除</span>'); div.append(_span); } 上面代码是在名字下面添加删除按钮,当然必须是图片类,如果是目录类则直接无视。K.formatUrl(result.current_url + data.filename, 'absolute')这句话是用kindeditor内置函数格式化图片路径,得到绝对路径,如/upload/image/2006/1.gif,我们把它存到data-url上来方便下面使用; 找到function createView(result) {下面的for (var i = 0, len = fileList.length; i < len; i++) {,在这个循环外面添加代码,如图:
添加代码:(下面可能要用到jquery了,你也完全可以用别的或者原生js,想要了解jquery请猛点:jquery快速入门) K(".xl_span").click(function(){//这里的.xl_span对应着刚才插入的删除按钮上的class var $this=K(this); if(!confirm('确定删除吗 ?')) {//提示,如果点击取消则直接退出 return false; } $.post('/admin/file_manager_json.php',{action:"delete",url:$this.attr("data-url")},function(res){//jquery的post,action为指定的配合后端用,url是获取刚才存在删除按钮上的图片路径,你完全可以用别的来写,因为用不好kindeditor的js库才用的jquery res==1?$this.parent().remove():alert("删除出现错误");//如果返回1则直接删除 图片,名字的Div达到即时删除,否则提示 if(K(".ke-plugin-filemanager-body").children().length<1){K(".ke-plugin-filemanager-body").html("没有图片了")}//检查是否没有图片了 }) }) 其中的'/admin/file_manager_json.php'是后端接受指的路径,现在js修改的部分就Ok了,你刷新去试下,看看是否有删除按钮。如图:
下面应该修改后端文件了,这里用的php程序,打开后端文件(可以新建也可以在“图片空间”后端文件上修改,建议在上修改),你完全可以用别的如asp,asp.net,jsp等,下面是添加的php代码: //谢亮添加删除的 if($_POST["action"]=="delete"){//如果action=delete $url=$_POST["url"]; if(empty($url)){//如果url为空 die(0); } $url=str_replace("/upload/","../../upload/",$url);//替换路径 if(file_exists($url)){//检查文件是否存在 $result=unlink($url);//删除文件 if($result){//如果成功删除 echo 1; }else{ echo 0; } }else{ echo 0; } exit(); } 其中的$url=str_replace时把传过来的绝对图片路径替换为相对于当前后端文件的相对路径,因为这样才能删除吧。(我用绝对路径删除不了,所以这样了)。至此kindeditor图片空间添加删除图片功能全部完成,学习吧测试完全没问题。 提示做这个有利有弊,利就是可以方便的管理图片,弊的是因为直接操作的服务器上的文件,安全方面一定要注意,一定要给后端文件添加权限设置,切记切记! |
作者: 小浪子, 发布日期: 2013-02-28 08:59:39 |
谢谢分享。。
其实只要自己懂点js。会使用工具(firebug).实现起来真心的不难。 另外。你的里面写到: if(data.is_photo){//如果是图片
虽然那个删除只能加到图片的下面。但是可以自己扩展一列。来做。因为可能要删除文件。flash,音频。。
还是那个意思、。。实现起来真心的不难 |
回复 |
作者: xieliang, 发布日期: 2013-02-28 11:31:09 |
回复小浪子:呵呵,kindeditor是真好用,扩展很方便,你说的非常对。
|
回复 |
作者: 小小, 发布日期: 2013-03-12 16:50:55 |
删除文字乱码 怎么回事 ???? |
回复 |
作者: xieliang, 发布日期: 2013-03-12 17:13:00 |
回复小小:可能你文件编码问题哦.看看文件本身编码和代码编码
|
回复 |
作者: 小小, 发布日期: 2013-03-13 17:23:56 |
回复xieliang:嗯 ,不乱码了,但是asp.net 删除的后置代码不会写呀!!哪个高手帮帮小弟
|
回复 |
作者: gremanyile, 发布日期: 2013-06-22 20:45:28 |
回复xieliang:
首先,谢谢你的分享! 我按照你的步骤弄了,但是还是没有弄好,请问你有别的联系方式吗?我的QQ2398269884, 希望你能够在空闲时,指导我一下。谢谢,或者发QQ邮件也行的。等你回复。 |
回复 |
作者: 一闪啊彷徨, 发布日期: 2013-11-16 14:07:52 |
回复小小:你的怎么做不乱码了?我的也出现乱码情况了。麻烦告诉下啊。
|
回复 |
作者: 一闪啊彷徨, 发布日期: 2013-11-16 14:51:15 |
回复小小: 出现这样的编码错误,看看什么原因啊。郁闷了很久了。 |
回复 |
作者: 小糊涂神, 发布日期: 2013-12-02 12:14:00 |
我用的是JSP,请问我该在哪编写删除的代码哟?。。。
|
回复 |
作者: 小糊涂神, 发布日期: 2013-12-02 12:33:21 |
回复小小:回复小小:你的写好了吗?后置代码要写在哪啊?
|
回复 |
作者: 天天zxwzx, 发布日期: 2014-01-08 01:20:49 |
留着备用!
|
回复 |