在ThinkPHP5.0.11中使用 CKEditor、CKFinder

插件下载地址

CKEditor

CKFinder

配置步骤及常见问题说明

配置步骤

  1. ​ 在页面中引入js,这里如果你使用了jquery 需要引入adapters/jquery.js
1
2
3
<script src="/ckeditor/ckeditor.js"></script>			//插件的位置 根据你的保存的路径设置
<script src="/ckeditor/adapters/jquery.js"></script>
<script src="/ckfinder/ckfinder.js"></script>
  1. 在页面中初始化CKEditor
1
2
3
4
5
var myeditor=CKEDITOR.replace('content',{
filebrowserBrowseUrl: "/ckfinder/ckfinder.html",
filebrowserImageBrowseUrl: '/ckfinder/ckfinder.html?Type=Images',
filebrowserImageUploadUrl: '/plugins/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images'
});

在未做如上配置之前,CKEditor 点击上传图片的图标是没有上传按钮的,网上有一些教程说是插件默认将这个按钮style设置为隐藏了,提供的解决办法是找到相应的位置修改css,其实只要配置了上传图片的处理文件路径,“ 上传 ”按钮就会显示出来。

  1. 整合CKEditor 和 CKFinder

CKEditor 只是一个富文本编辑器,没有文件浏览和文件上传的功能, CKFinder是用来上传文件和浏览服务器上的文件的,和CKEditor配合实现文件上传。

1
CKFinder.setupCKEditor(myeditor,"/ckfinder/");     //ckfinder插件存放的相对路径
  1. ​ 图片上传

首先在 ckfinder/config.php 中找到 $baseUrl = ‘/userfiles/‘ ,将其设置为你要保存上传文件的路径,你也可以动态设置地址。

再向下可以找到 $config[‘ResourceType’]为Images 的配置项,这里对上传图片的大小、扩展名进行配置。

常见问题

首先记得更改任何配置,如果没有效果要手动清除一下浏览器缓存,使用ctrl+F5也不能全部刷新,导致我花了一下午时间找问题,才发现其实已经配置好了。

  1. 隐藏 “浏览服务器文件按钮”
1
在 ckeditor/plugins/image/dialogs/image.js  找到仅有的一项 display:inline-block 将其设置为display:none;就可以隐藏掉了
  1. 缺少图像源文件地址

这是由于预览没有权限读取上传的文件的地址,更改浏览服务器文件的权限,只有用户登录后或当前用户只能查看自己上传到服务器的文件 ,在登录成功后设置一个授权字段到session中 ,不建议直接改为true,安全性较低。

1
2
3
4
5
6
7
session_start();

if(isset($_SESSION['IsAuthorized'])&&$_SESSION['IsAuthorized']==true){
return true;
}else{
return false;
}
  1. 上传文件重名问题

ckfinder会按照原有的名字命名,中文的情况下可能会乱码,所以建议使用日期重命名。

1
2
3
4
5
6
7
打开/ckfinder/core/connector/php/php5/CommandHandler/FileUpload.php 找到
sUnsafeFileName=CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding(CKFinder_Connector_Utils_Misc::mbBasename(uploadedFile['name']));

后面加上

sExtension = CKFinder_Connector_Utils_FileSystem::getExtension(sUnsafeFileName);
sUnsafeFileName=date('YmdHis').'.'.sExtension;
  1. 上传和图像对调位置

    修改ckeditor/plugins/image/dialogs/image.js 文件。其实按钮的位置是按照以下方式排列的 ,所以只要将 uplaod部分的内容放在contents数组的第一个就好了。
    
1
2
3
4
5
6
contents:[{
id:"info" ....,
id:"Upload" ....,
id:"Link" ....,
id:"advanced" ....,
}]
  1. ​ 清空预览区文字
1
2
3
在ckeditor/config.js添加配置项 

config.image_previewText=' '; //预览区域显示内容
  1. 去除掉不需要的选项卡
1
config.removeDialogTabs = "image:advanced;image:Link;";  //去掉上传图片时超链接和高级按钮
  1. 获取内容,并判断是否为空

方法一:原生的方法

1
2
editor 为初始化时创建的实例
editor.document.getBody().getText()

方法二:直接getData获取数据时如果使用了空格、回车,会添加p标签,将空格转义,导致获取的长度永远不会为空。

1
2
3
4
5
6
7
var content = editor.getData();
content = content.replace(/(&nbsp;)+/g,"");
content = content.replace(/(<p><\/p>)+/g,"");
content = $.trim(content);
if(content==""){
...
}
  1. 自定义菜单栏 参见文档可配置的项
1
2
3
4
5
6
// 工具栏(基础'Basic'、全能'Full'、自定义)plugins/toolbar/plugin.js
config.toolbar = 'Basic';
config.toolbar = 'Full';
编辑ckeditor目录下的的config.js文件,默认的是下面的工具栏代码,

注意工具按钮是分组的,一个name内的大括号就是一个工具按钮分组,items后边是具体的按钮,“/”表示工具栏换行,“-”表示工具图标之间的中隔线“|”

Copyright © 2018 - 2019 诗之花绪 All Rights Reserved.

UV : | PV :