Asp.net中FCKeditor2.6.3配置详解

恰好须要用到.net编辑器的时候,选择了传说中的FCKeditor好好的研究了一下!以前没有用过,遇到了必定的麻烦,如今拿出来和你们分享,但愿对你也会有所帮助!javascript

FCKeditor是个国外的多语言编辑器,你能够对其配置文件进行简单修改使之支持目前经常使用Web开发语言的应用,下面我就讲讲FCKeditor2.6.3版本在Asp.net中的具体配置过程,有不足和出错的地方,欢迎指正。php

精简:css

正由于这个编辑器是支持多语言的,因此首先咱们针对使用对其作相应的冗余文件删除。html

一、临时文件及文件夹删除:从根目录下开始删除一切以“_” 开头的文件及文件夹,由于他们为临时文件和文件夹。删除这类临时文件及文件夹以后,咱们还 要删除一些根目录下的多余文件,根目录下咱们只保留fckconfig.js(配置文件)、fckeditor.js(js方式调用文件)、 fckeditor.asp、 fckstyles.xml(样式)、fcktemplates.xml(模板)文件和editor文件夹。java

二、editor\lang目录:存放的是多语言配置文件,由于咱们只可能用到en和zh-cn(简体中文)因此,根据个人选择,我删掉其余的语言配置文件。数组

三、editor\skins界面目录:默认带有三个界面(default:默认界面,加载速度相对较快;office2003:相对pp的界面,不过速度确实要慢些;silver:银白色界面,加载速度也相对较快),能够自行决定是否删除其中一两个。安全

四、editor\filemanager \connectors目录:存放编辑器所支持的Web动态语言,咱们以 Asp.net为例因此保留aspx目录,test.html文件能够帮助你查看某语言下的上传设置等(具体上传设置我将在后面的配置做较为详细讲解), 能够自行决定是否删除。服务器

到此精简完成,你会发现整个编辑器确实“瘦身”很多,呵呵session

基本配置:编辑器

下面我开始对编辑器进行简单配置(并不是每步都必须,可根据本身的须要参考修改):

一、载入fckeditor的.net方法类库FCKeditor.Net_2.6.3.zip

解压FCKeditor.Net_2.6.3.zip,添加到项目中(载入后别忘了把工程名FredCK.FCKeditorV2.vs2005改成FredCK.FCKeditorV2),在主目录的bin文件夹中添加改引用!

二、默认语言

打开fckconfig.js文件(注意此文件是utf-8 编码哦), 找到FCKConfig.AutoDetectLanguage = true ;(第56行)此句做用为自动检测语言,默认为true,即表示编辑器会根据系统语言自动检测加载相应的语言,咱们将其改成false,不让其检测,而后 将FCKConfig.DefaultLanguage = 'en';(编辑器默认语言,第57行)改成简体中文"zh-cn"。

三、字体列表

依然打开fckconfig.js,由于此编辑器为外国人编写,因此默认不提供中文字体,咱们为其加入,找到FCKConfig.FontNames(第142行)加入“宋体;楷体_GB2312;新宋体;黑体;隶书;幼圆;”其余字体可根据本身须要自行加入。

四、文件上传

FCKeditor的文件管理程序在 editor/filemanager/文件夹下,分为浏览(browser)和上传(upload)两种。“浏 览”是指浏览服务器已存在文件并能够选择,也能够上传本地文件至服务器;上传是指快速上传,在窗口中点“上传”选项,选择本地文件后上传就行,可是不能查 看服务器上已有上传文件,相对而言不太方便,只是操做更为快捷。也就是说FCKeditor中有一个文件浏览,有两个文件上传,而这些设置是分散在多个文 件中,配置相对复杂,下面我大体讲一下:

在FCKeditor中共有两个文件跟上传功能有关,一个是js文件,一个是aspx文件,前者关闭后界面中不出现相关窗口或按钮,后者关闭后相关功能不可用。

js文件便是指的fckconfig.js文件,在之前旧版本的fckconfig.js中首先你必需开启以下几项:

浏览上传功能:

CODE:

FCKConfig.LinkBrowser = true ; //文件

FCKConfig.ImageBrowser = true ; //图片

FCKConfig.FlashBrowser = true ; //Flash

快速上传功能:

CODE:

FCKConfig.LinkUpload = true ; //同上

FCKConfig.ImageUpload = true ; //同上

FCKConfig.FlashUpload = true ; //同上

即把这几项设为true,而咱们今天使用的2.6.3的 fckconfig.js中默认已是开启上传开关显示功能的,因此,若是你要将该编辑器做为前 台使用(fckeditor上传漏洞问题一直没有获得较好的改善),考虑到安全性你可能须要关闭文件上传功能,那么你只须要将这几项设置为false即 可。

若是你要使用文件上传功能,那么咱们继续配置:

依然在fckconfig.js文件中,fckeditor对语言默认支持的是php,找到如下两句,进行相应修改:

CODE:

var _FileBrowserLanguage = 'php' ; // asp | aspx | cfm | lasso | perl | php | py

var _QuickUploadLanguage = 'php' ; // asp | aspx | cfm | lasso | php

咱们将其均改成'aspx':

CODE:

var _FileBrowserLanguage = 'aspx' ; // asp | aspx | cfm | lasso | perl | php | py

var _QuickUploadLanguage = 'aspx' ; // asp | aspx | cfm | lasso | php

*.AllowedExtensions:(其中*号代 表:FCKConfig.LinkUpload、FCKConfig.ImageUpload 等)表示容许上传的文件后缀名,为空表示容许全部文件,你可根据本身须要设置上传文件后缀名,必定程度增长安全性,设置的格式能够参考它已有的后缀名设 置。

*.DeniedExtensions:同上,表示禁止上传的文件后缀名。

注:你设置了容许上传的,固然禁止的也就没必要要设置了,本人推荐设置容许的,毕竟禁止的后缀名列表不能罗列彻底,可能还有不少咱们未曾想到的后缀名。

对js文件的配置到此已经完成,下面咱们进行aspx文件在上传方面的设置:

文件浏览上传修改:

打开editor\filemanager\browser\default\connectors\aspx\config.ascx文件,找到:

private bool CheckAuthentication()
       {
              // WARNING : DO NOT simply return "true". By doing so, you are allowing
               // "anyone" to upload and list the files in your server. You must implement
                // some kind of session validation here. Even something very simple as...
                //
                //   return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true );
                //
                // ... where Session[ "IsAuthorized" ] is set to "true" as soon as the
                // user logs in your system.

                return false;
        }

将return false改成return true,即容许上传,最好在前面加上session判断用户登录,以免全部人均可以上传。

UserFilesPath= "/userfiles/" ;为定义上传目录,可根据本身状况进行修改,我将其改成upload目录。

注:注意FCKeditor是不支持虚拟目录的,你的全部路径都是针对网站根目录的绝对路径。

到此上传基本配置已经完成,整个编辑器最基本的配置也已经结束了,你能够经过下列代码对其进行调用测试了:

<%@ Page Language="C#" %>

<%@ Register Assembly="FredCK.FCKeditorV2" Namespace="FredCK.FCKeditorV2" TagPrefix="FCKeditorV2" %>

http://www.w3.org/1999/xhtml>

FCKeditor - Sample

赶忙测试一下吧,是否是很激动,终于能够看到这个强大的编辑器了,呵呵。

咱们能够为上传文件以时间+随机数做为其新名字,在 FredCK.FCKeditorV2类中的FileBrowser下的FileWorkerBase.cs文件中修改protected void FileUpload( string resourceType, string currentFolder, bool isQuickUpload )方法中的sFileName处便可,能够本身写方法命名,我就不在这里献丑了!

当完成以上设置后,fckeditor已经能知足咱们的平常 使用须要,不过咱们却又发现一个问题,那就是上传后的文件咱们却没法删除,这样会使网站上 的垃圾文件(主要是图片)日益增多,那咱们是否可以经过对编辑器的修改能较为方便的管理删除无用上传文件呢?咱们不难想到fckeditor的浏览文件功 能,对该功能进行适当的扩展,对平常所上传的文件进行管理就变得至关简单易行了,那咱们赶忙动手吧:

增长该功能咱们修改的页面为:fckeditor\editor\filemanager\browser\default\frmresourceslist.html

第一步,在页面的body区域增长以下代码:

CODE:

  

说明:第一对的做用是当咱们把鼠标移动到所上传的文件上时显 示其相关信息;标签的做用是供咱们删除上传文件时作动做响应窗口的,便是将咱们的删除动做在 iframe中运行,目的是实现伪无刷新删除效果;最后一对的做用是显示上传文件及文件夹的列表

第二步,在文件的js代码区中加入:

CODE:

// 显示文件显示层

function showDiv( fileUrl )

{

var name = fileUrl;

//获取文件类型

var suffix = name.substring(name.lastIndexOf(".")+1);

var div= document.getElementById("showFile");

div.content = "";

div.style.position = "absolute";

div.content += "

";

if (suffix=='gif' || suffix=="jpg" || suffix=="jpeg" || suffix=="bmp" || suffix=="png")

{

div.content += "

";

}

else

{

div.content += "

< /tr>";

}

div.content += "

 关闭 删除 < /td>
该类型不能预览
";

div.innerHTML = div.content;

div.style.display = "";

div.style.top = event.y+document.body.scrollTop+10;

div.style.left = event.x+document.body.scrollLeft+30;

}

// 隐藏文件显示层

function hiddenDiv()

{

var div= document.getElementById("showFile");

div.style.display ="none";

}

// 在iframe中删除文件

function delFile( fileUrl )

{

if(!confirm('你肯定删除该文件?'))

return;

var url = '/fckeditor/del_file.aspx?filePath='+ fileUrl;   //这里请本身建一个del-file.aspx

window.open(url, "iframe_del");

Refresh();

}

///*}}}*/

第三步,修改本页面原有js

修改:

CODE:

  oListManager.Clear = function()

{

document.body.innerHTML = '' ;

}

为:

CODE:

  oListManager.Clear = function()

{

hiddenDiv();

document.getElementById("body_content").innerHTML = '' ; // body_content为咱们在body区域增长的div标签

}

找到:

CODE:

var sLink = '' ;

修改成:

CODE:

var sLink = '' ; // 便是文件信息显示功能

修改:

CODE:

  function Refresh()

{

LoadResources( oConnector.ResourceType, oConnector.CurrentFolder ) ;

}

为:

CODE:

  function Refresh()

{

hiddenDiv(); // 所做修改,为了刷新列表时默认隐藏文件显示层

LoadResources( oConnector.ResourceType, oConnector.CurrentFolder ) ;

}

修改函数:GetFoldersAndFilesCallBack,找到:

CODE:

document.body.innerHTML = oHtml.ToString() ;

修改成:

CODE:

document.getElementById("body_content").innerHTML = oHtml.ToString() ;

最后,增长一个文件删除页面del_file.aspx(该文件路径和增长的js函数delFile(fileUrl)中的调用一致),做用为删除文件,给出成功与否的操做提示,参考代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["filePath"] != null)
        {
            if (Request.QueryString["filePath"].Trim() != "")
            {
                //BLF.Clean(Server.MapPath(Request.QueryString["filePath"].Trim().ToString()));
            }
        }
    }

///


        /// 删除指定目录以及该目录下全部文件
        ///

        /// 欲删除文件或者目录的路径
        public static void Clean(string dir)
        {

            CleanFiles(dir);//第一次删除文件

            CleanFiles(dir);//第二次删除目录

}
        private static void CleanFiles(string dir)
        {
            if (!Directory.Exists(dir))
            {
                File.Delete(dir);
                return;
            }
            else
            {
                string[] dirs = Directory.GetDirectories(dir);
                string[] files = Directory.GetFiles(dir);

                if (0 != dirs.Length)
                {
                    foreach (string subDir in dirs)
                    {
                        if (null == Directory.GetFiles(subDir))
                        {
                            Directory.Delete(subDir);
                            return;
                        }
                        else CleanFiles(subDir);
                    }
                }
                if (0 != files.Length)
                {
                    foreach (string file in files)
                    {
                        File.Delete(file);
                    }
                }
                else Directory.Delete(dir);
            }
        }

使用方法,一句话.Directory.Delete( path, true)

以上有人可能认为很烦,没有意义,没必要用递归呢.几句代码就能够了.
但我想说,使用递归的好处就是,能够,在里面作判断,好比你只想删除其中的部分条件文件,你能够这样改一下..好比你只想删除名字等到.aaa.txt的.彻底能够,

foreach ( string subDir in dirs )
         
      {
           
       if ( null == Directory.GetFiles( subDir )   && subDir == "aaa.txt")
            
       {
                         Directory.Delete( subDir );
                
        return;
            
       }
            
       else CleanFiles ( subDir );
        
      }

固然我只是弄个简单例子,但但愿有用.呵.

能够在fckconfig.js中找到FCKConfig.ToolbarSets["Default"]设置编辑器的工具栏,能够自行定义,删减

至此,我对于fckeditor的修改基本完成,固然这些修 改只是对fckeditor修改使用的抛砖引玉,给你们一个参考,但愿对初学者有所帮助。 后面对编辑器的修改过程比较匆忙,并未修改一步完成一步文档书写,因此,不免有所出错,望见谅,若是你有什么问题和错误发现欢迎联系我互相讨论,共同进 步,呵呵。

By chenjun @ 2008-11-13

Email: chenjun@jingzhengli.cn

另附:

配置文件(fckconfig.js)中主要配置项目以下,根据本身看状况配置:

CODE:

FCKConfig.CustomConfigurationsPath = '' ; // 自定义配置文件路径和名称

FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css'; // 编辑区的样式表文件

FCKConfig.BaseHref = ''; // 相对连接的基地址

FCKConfig.Debug = true/false; // 是否开启调试功能,当调用FCKDebug.Output()时,会在调试窗中输出内容

FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/'; // 设置皮肤

FCKConfig.AutoDetectLanguage = true/false ; // 是否自动检测语言

FCKConfig.DefaultLanguage = 'zh-cn' ; // 设置默认语言

FCKConfig.ContentLangDirection = 'ltr/rtr'; // 默认文字方向,ltr左,rtr右

FCKConfig.FillEmptyBlocks = true/false ; // 使用这个功能,能够将空的块级元素用空格来替代

FCKConfig.FormatSource = true/false; // 切换到代码视图时,是否自动格式化代码

FCKConfig.FormatOutput = true/false; // 当输出内容时是否自动格式化代码

FCKConfig.FormatIndentator = ""; // 当在“源码格式”下缩进代码使用的字符

FCKConfig.GeckoUseSPAN = true/false; // 是否容许SPAN标记代替B,I,U标记

FCKConfig.StartupFocus = true/false; // 开启时是否FOCUS到编辑器

FCKConfig.ForcePasteAsPlainText = true/false;// 强制粘贴为纯文本

FCKConfig.ForceSimpleAmpersand = true/false; // 是否不把&符号转换为XML实体

FCKConfig.TabSpaces = 0/1; // TAB是否有效

FCKConfig.TabSpaces = 4; // TAB键产生的空格字符数

FCKConfig.ShowBorders = true/false; // 是否合并边框

FCKConfig.ToolbarStartExpanded = true/false; // 页面载入时,工具栏是否展开,点“展开工具栏”时才出现

FCKConfig.ToolBarCanCollapse = true/false; // 是否容许展开折叠工具栏

FCKConfig.ToolbarSets = object ; // 编辑器的工具栏,能够自行定义,删减,可参考已存在工具栏

FCKConfig.EnterMode = 'p'; // 编辑器中直接回车,在代码中生成,可选为p | div | br

FCKConfig.ShiftEnterMode = 'br'; // 编辑器中Shift+回车,在代码中生成,可选为p | div | br

FCKConfig.ContextMenu = 字符串数组; // 右键菜单的内容

FCKConfig.FontColors = ""; // 文字颜色列表

FCKConfig.FontNames = ""; // 字体列表

FCKConfig.FontSizes = ""; // 字号列表

FCKConfig.FontFormats = ""; // 文字格式列表

FCKConfig.StylesXmlPath = ""; // CSS样式列表的XML文件的位置

FCKConfig.TemplatesXmlPath = ""; // 模版的XML文件位置

FCKConfig.SpellChecker = "ieSpell/Spellerpages"; // 拼写检查器

FCKConfig.IeSpellDownloadUrl = ""; // 下载拼写检查器的网址

FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/'; // 表情文件存放路径

FCKConfig.SmileyImages = ''; // 表情文件名称列表,具体参考默认设置

FCKConfig.SmileyColumns = 8; // 表情窗口显示表情列数

FCKConfig.SmileyWindowWidth = 320; // 表情窗口显示宽度,此窗口会由于表情文件的改变而做调整

FCKConfig.SmileyWindowHeight = 240; // 表情窗口显示高度,此窗口会由于表情文件的改变而做调整

FCKConfig.FullPage = true/false; // 是否容许编辑整个HTML文件,仍是仅容许编辑BODY间的内容

引用自:http://www.jingzhengli.cn/Blog/cj/819.html#
www.voswin.com



--------------------------
新闻:传IBM收购Sun尽职调查程序未完 谈判仍在继续
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
相关文章
相关标签/搜索