ckeditor默认并没有上传图片的按钮,其实并不是没有该功能,只是想要使用这项功能需要进行一些设置,具体方法如下:
1、如果你觉得上传窗口里的预览的那些东东挺不喜欢的话,可以在config.js里加上一句config.image_previewText="";立马搞定;还有一种方法是在ckeditor的安装目录里找\plugins\image\dialogs找到image.js,在里面找到相应的内容,把它们删了,也可以,不过千万不要删多了。
2、在ckeditor/plugins/image/dialogs/image.js搜索:id:'Upload',hidden:!0把上面的!0改成false。
3、导入ckeditor,这里介绍的是JS导入的方法,首先在页面中引入ckeditor核心文件ckeditor.js,具体是:;接着在使用编辑器的地方插入HTML控件,具体是:;最后将相应的控件替换成编辑器代码,具体是: CKEDITOR.replace('mytext');。
4、到这里还没完,还要在config.js里设置图片的处理文件,具体是在config.js的文件里加上一句:config.filebrowserImageUploadUrl=“URL”,引号里的URL是具体的图片处理文件的路径,包括文件名和后缀全都要。 至此就全部设置完成了。
5、这里要特别说一下关于在TP框架里怎么使用ckeditor的问题,因为TP的地址栏写法是经过rewrite的,所以格式跟通常的有所不同,那怎么办呢,事实上其它都一样,关键是第4步,TP的url一般写成http://server/a/b/c,本来这样写就可以了,但是如果是config.js里就写成:config.filebrowserImageUploadUrl=“/a/b/c”,就会报错,无法上传图片,而是必须在后面在加上一个参数才可以,比如写成:config.filebrowserImageUploadUrl=“/a/b/c/d/e”,这样才可以。
最后附上一段图片的上传处理函数:
function upload( $upPath=null, $size=3 ){
if( !$upPath ) return;
if( !$_FILES ) return;
$houzui = array("jpg","bmp","gif","png");
$upFilename = $_FILES['upload']['name'];
$upFilesize = $_FILES['upload']['size'];
if( $upFilesize > $size * 1024 * 1000 )
exit( "*文件大小不能超过3M");
$houz = pathInfo( $upFilename, 4 );
if( in_array( $houz, $houzui ) ){
$uri= str_replace('.','',uniqid("",TRUE)).".".$houz;
$fn = $upPath.$uri;
move_uploaded_file($_FILES['upload']['tmp_name'],$fn);
//预览的图片地址不能是本地地址,所以要进行替换,把本地地址替换成
//服务器地址,ROOT和HOST要自己声明
$fn = str_replace( ROOT, HOST, $upPath ) . $uri;
$call = $_REQUEST["CKEditorFuncNum"];
$str = "
$str .= "window.parent.CKEDITOR.tools.callFunction";
$str .= "($call,'".$fn."','');";
//这里是为了在编辑器里能预览图片
echo $str;
}else{
$str = "文件格式不正确";
$str .= "(必须为.jpg/.gif/.bmp/.png文件)";
echo $str;
}
}
以上针对的是较早版本(如3.6.5版)的CK,而如果是较新版的(如4.14版),则会有问题,虽然图片可以上传,但是会报错(不正确的服务器响应),图片无法插入到CK里面。原因是CKEditor从4.9.0版本开始引入了xhr方法上传文件,并且替代原来的form方法成为了默认的上次方法。在使用xhr上传时,前端提交的表单不会有CKEditorFuncNum字段,需要修改配置文件的filebrowserUploadMethod项使用form上传;当然还有方法是不需要接收CKEditorFuncNum。
总的来说处理这个问题有两种方法,方法一是不修改php处理文件,仍然通过接收CKEditorFuncNum来实现,那么就需要进行config设置,必须在config里加上一句:config.filebrowerUploadMethod = 'form',其它全部照旧。方法二是不修改设置,而是把原来的php处理文件的echo ""(这个写法跟上面函数里的写法稍有不同,实际上一个样),改成:echo "{'uploaded':1,'fileName':'','url':$desname}";也可以写成这样:$json['uploaded'] = 1;$json['fileName']='';$json['url] = $desname;echo json_encode( $json );