源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 836|回复: 24

[网页编辑器] 关于CKeditor的非主流个性应用的设置

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2009-12-27 22:13:16 | 显示全部楼层 |阅读模式
因为我的网站需要一个编辑器,所以用周末时间研究了一下CKeditor,终于最终修改成了合适的样子。
        
        
            CKeditor,以前叫FCKeditor,已经使用过好多年了,功能自然没的说。最近升级到3.0版,好像重写了代码,所以构建的方式也有了些变化,应该说是更简单了。
相关地址:
官方网站:http://ckeditor.com/
下载地址:http://ckeditor.com/download
CKfinder:http://ckfinder.com/ 用于上传的插件(有四种语言版本,根据需要下载)
部署:
将CKeditor下载下来,解压网站/ckeditor/下面(当然名字可以修改,只是需要修改相应config文件来设置新路径)
调用:
在页面的head中调用
  
然后在需要编辑器的地方放置一下代码:
[U]复制代码[/U] 代码如下:
这里是默认值,修改文本的内容是放在这里。html需要进行HTMLEncode编码


搞定,就这么简单,CKEDITOR.replace('Text')就是创建编辑器的代码,CKEDITOR.replace()方法中还可以设置编辑器的样式,设置如下
[U]复制代码[/U] 代码如下:
var editor = CKEDITOR.replace( 'Text',
{
language:'zh-cn',//简体中文
toolbar ://工具栏设置
[
['Source'],
'/',
['Cut','Copy','Paste','PasteText','PasteFromWord'],
['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
['TextColor','BGColor'],
]
});
具体的设置有很多,具体的可以查看他的帮助:
[color=]http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html

这个设置可以在/ckeditor/config.js中设置,在这里设置之后,就修改了编辑器的默认默认设置,而上面设置只应用于当前编辑器。
具体的设置方法如下
[U]复制代码[/U] 代码如下:
CKEDITOR.editorConfig = function( config )
{
// Define changes to default configuration here. For example:
config.language = 'zh-cn'; //配置语言
//config.uiColor = '#FFF'; //背景颜色
config.width = 500; //宽度
config.height = 400; //高度
config.skin='v2'; //设置编辑器的风格,不太喜欢现在的样子,还是喜欢v2版本的样子,干净、清爽。
//工具栏
config.toolbar =
[
['Source'],
'/',
['Cut','Copy','Paste','PasteText','PasteFromWord'],
['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
['TextColor','BGColor'],
]
};

数据提交
到这里我们已经基本上设置好了。如果调用的话后台可以使用request["text"]来获取编辑器的文本。
在fckeditor(Ver 2.0)中时,它提供了一个web控件,可以直接使用,但是在3.x中好像没有提供,好在我用的Asp.net Mvc所以有没有的对我来说没有任何问题。
提到上面的一句是因为,默认的asp.net是禁止上传带有html标签的文本的,当然可以通过修改页面的配置来实现,但是在fckeditor(Ver 2.0)中他在提交数据前对内容进行了HTMLEncode(将&分别替换成了&),确实是一个非常棒的方法,这样就不需要对asp.net的默认设置进行修改。
但是在CKeditor中默认提交就是将原始的数据直接post了,后来通过以前老版本的代码发现其实CKeditor提供了一个方法可以进行HTMLEncode,它就是CKEDITOR.tools.htmlEncode(string),如果直接使用form表填submit就没有办法实现了,所以只能采用JavaScript进行提交。我的选择是使用jQuery的ajax方式提交。代码如下:
[U]复制代码[/U] 代码如下:
$(function(){
$("#btSubmit").click(function(){//$("#btSubmit")获取的是提交按钮,这里绑定提交按钮的click事件
var oEditor = CKEDITOR.instances.Text;//获得编辑器对象
var text = oEditor.getData();//获取编辑器的数据
text = CKEDITOR.tools.htmlEncode(text);//进行HTMLEncode编码
$.post("PostUrl",{Text:text},callback);//提交数据,具体的调用方式和返回类型请查阅jQuery的帮助
function callback(data){}//回调函数
});
})

提交到服务器在进行反向的编码就可以了。
安全性
通过上面的提交虽然很好,但是绕过了系统默认的安全防御,很容易被提交恶意代码,所以在服务器端还需要进行安全的验证。
虽然CKeditor提供了验证的设置方法,但是我没有试验成功(Ver2时代就没成功),不晓得他是怎么运作的,有时间好好研究下,代码如下:
[U]复制代码[/U] 代码如下:
//在/ckeditor/config.js文件的CKEDITOR.editorConfig中添加一下代码
config.protectedSource.push( //gi ) ; // tags.
config.protectedSource.push( //gi ) ; //  tags.
config.protectedSource.push( //gi ) ; //  tags.
config.protectedSource.push( //gi ) ; //  

现在在打开编辑器的图片、链接、flash,窗口就多了一个上传选项卡,可以选择上传,还提供了浏览功能。
因为涉及到文件夹的访问权限,功能与我的网站需求不符,所以我没有使用它提供的默认上传,对他进行了修改。
上传方式的修改
我的图片服务器是image.tiyu.cc而网站的服务器是https://www.jb51.net/www.jb51.net/,也不需要它提供的浏览功能,而且除了图片上传,不允许上传其他的文件。
这样就需要有三个地方需要修改,1.修改默认上传2.取消浏览功能3.取消文件、flash上传功能。
CKeditor的上传路径设置在/CKfinder/ckfinder.js中,有一项设置是CKFinder.SetupCKEditor,它的下面有以下代码,可以设置是否需要图片、文件、flash的浏览路径以及上传路径。
[U]复制代码[/U] 代码如下:
//设置文件的浏览路径
editorObj.config.filebrowserBrowseUrl = url ;
//设置图片的浏览路径
editorObj.config.filebrowserImageBrowseUrl = url + qs + 'type=' + ( imageType || 'Images' ) ;
//设置flash文件浏览路径
editorObj.config.filebrowserFlashBrowseUrl = url + qs + 'type=' + ( flashType || 'Flash' ) ;
//设置文件上传文件地址
editorObj.config.filebrowserUploadUrl = dir + "core/connector/" + ckfinder.ConnectorLanguage + "/connector."
+ ckfinder.ConnectorLanguage + "?command=QuickUpload&type=Files" ;
//设置图片文件上传地址
editorObj.config.filebrowserImageUploadUrl = dir + "core/connector/" + ckfinder.ConnectorLanguage + "/connector."
+ ckfinder.ConnectorLanguage + "?command=QuickUpload&type=" + ( imageType || 'Images' ) ;
//设置flash文件上传地址
editorObj.config.filebrowserFlashUploadUrl = dir + "core/connector/" + ckfinder.ConnectorLanguage + "/connector."
+ ckfinder.ConnectorLanguage + "?command=QuickUpload&type=" + ( flashType || 'Flash' ) ;

根据CKeditor是根据上传路径的有无来控制是否显示相应的上传标签,浏览按钮也是。
根据上面的需求,设置如下:
[U]复制代码[/U] 代码如下:
//设置文件的浏览路径
editorObj.config.filebrowserBrowseUrl = "";
//设置图片的浏览路径
editorObj.config.filebrowserImageBrowseUrl = "";
//设置flash文件浏览路径
editorObj.config.filebrowserFlashBrowseUrl = "";
//设置文件上传文件地址
editorObj.config.filebrowserUploadUrl = "";
//设置图片文件上传地址
editorObj.config.filebrowserImageUploadUrl = "新地址";
//设置flash文件上传地址
editorObj.config.filebrowserFlashUploadUrl = "";

设置到这里再次打开编辑器的相应窗口就会发现除了图片上传按钮外其他的浏览上传都隐藏掉了。
创建新的上传文件
具体步骤是,首先创建一个新的上传接收文件,接受并保存上传的文件,然后将文件的路径反馈给编辑器。
编辑器的接收是通过一个方法实现的,具体如下:
  CKEDITOR.tools.callFunction(fnID, 'FileUrl', 'Message');
其中fnID是调用的实际方法的编号,不同的浏览器,CKeditor调用不同的方法。
我们只需要调用上面的方法就可以了,具体上传成功后,在页面上输出一下代码

FileUrl、Message,可以只有一个,也可以同时存在。Message主要应用于上传失败时的提示信息。
关于fnID,这个具体的说明不是很清楚,但是通过代码发现FF浏览器它的值是2,其他的浏览器是1,通过这个可以得出结论是,通过它来告知CKeditor来调用哪个方法接受上传反馈信息。
这个值,可以通过我们自己的程序去获得。但是更好的方式是CKeditor给我们提供的值,当我们设置editorObj.config.filebrowserImageUploadUrl = "新地址"时CKeditor会自动为我们增加几个个url参数:
新地址?CKEditor=Text&CKEditorFuncNum=2&langCode=zh-cn
其中CKEditorFuncNum就是我们需要的fnID,我们可以直接获取到,然后反馈回来就好了。
如果选择跨域上传,只需要在当前域(https://www.jb51.net/www.jb51.net/)设置一个GetFile.aspx他有三个参数,分别是接受fnID,FileUrl、Message这三个值,在我们的editorObj.config.filebrowserImageUploadUrl中设置成http://Image.jb51.net/upfile.aspx?backUrl=https://www.jb51.net/www.jb51.net/GetFile.aspx,就可以了,image.jb51.net域的upfile.aspx接受到文件,处理完成之后:
[U]复制代码[/U] 代码如下:
ImageUrl="http://image.jb51.net/UpFile/2009/11/1/2009111201346_695.jpg"
Message="根据错误与否,设置,没有错误可以为空"
CKEditorFuncNum=request("CKEditorFuncNum")
response.Redirect("https://www.jb51.net/www.jb51.net/GetFile.php?ImageUrl="+ ImageUrl + "&Message=" + Message + "&CKEditorFuncNum=" + CKEditorFuncNum)

搞定,收工,睡觉,做个好梦。
回复

使用道具 举报

16

主题

2万

回帖

376

积分

中级会员

Rank: 3Rank: 3

积分
376
发表于 2022-8-9 04:21:27 | 显示全部楼层
1312315458748777
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-2-19 09:53:44 | 显示全部楼层
怕怕怕怕怕怕怕怕怕怕怕怕怕怕
回复 支持 反对

使用道具 举报

3

主题

2万

回帖

172

积分

注册会员

Rank: 2

积分
172
发表于 2023-5-1 09:20:49 | 显示全部楼层
呵呵呵呵呵呵
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-8-23 05:55:35 | 显示全部楼层
天天源码社区论坛
回复 支持 反对

使用道具 举报

7

主题

2万

回帖

288

积分

中级会员

Rank: 3Rank: 3

积分
288
发表于 2023-8-26 19:56:34 | 显示全部楼层
先把创新班才能下班才能下班
回复 支持 反对

使用道具 举报

6

主题

2万

回帖

247

积分

中级会员

Rank: 3Rank: 3

积分
247
发表于 2023-8-29 21:24:53 | 显示全部楼层
老大你好你好好你好
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

120

积分

注册会员

Rank: 2

积分
120
发表于 2023-9-12 00:52:26 | 显示全部楼层
天天源码社区www.tiantianym.com
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-9-15 15:45:45 | 显示全部楼层
而快乐你们快乐马年快乐
回复 支持 反对

使用道具 举报

4

主题

2万

回帖

303

积分

中级会员

Rank: 3Rank: 3

积分
303
发表于 2023-11-29 23:01:59 | 显示全部楼层
终于找到了,我擦
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-24 18:05 , Processed in 0.079354 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表