CommunityServer2.0安装功能全面的FCKeditor2.31

添加人:iyond五级(2391分)   添加时间:2007-04-11    阅读次数:1388  收藏此教程

    CommnunityServer2.0由于其鲜明的web2.0特性和友好的用户界面以及强大的功能,吸引了包括我在内的越来越多的爱好者,不过相信对于官方原始版本的贴图和附件功能,一向是个问题,我想,最简单的解决方法就是给他的编辑器换成FCKeditor2.31,利用其可订制的上传文件功能来解决这个问题。

本例说涉及到的文件可以到这里下载。

编译好的dll和fckeditor编辑器

fckeditor2.31.net源代码

   说做就做,让我们打开vs2005,建立一个类库项目,比方说Cnfdc.FCKforCS,然后添加引用:

Communityserver.Controls

FredCK.FCKeditorV2

然后建立一个类,名叫FCK.cs

编写如下代码,对fCK按照cs要求的属性来进行封装:

namespace Cnfdc.FckForCs
{
    
using CommunityServer.Controls;
    
using FredCK.FCKeditorV2;
    
using System;
    
using System.Configuration;
    
using System.Web.UI.WebControls;

    [Editor(
"FCK编辑器标准版""FCK editor")]
    
public class FCK : FCKeditor, ITextEditor
    
{
        
private int _columns;
        
private bool _enableHTML = true;
        
private int _rows;
        
private string _styleName="Default";

        
public FCK()
        
{
            Modal m 
= new Modal();
            m.ModalType 
= ModalType.Window;

            
this.Controls.Add(m);            

            
this.ReConfigure();
        }


        
protected override void OnPreRender(EventArgs e)
        
{
            Configure();
            
base.OnPreRender(e);
        }


        
public void Configure()
        
{
            
if (this._enableHTML)
            
{
                
base.ToolbarSet = "Default";
            }

            
else
            
{
                
base.ToolbarSet = "Basic";
            }

       }


        
public void ReConfigure()
        
{
            
base.Height = Unit.Pixel(350);
            
if (base.Width.IsEmpty)
            
{
                
base.Width = Unit.Pixel(685);
            }

            
base.BasePath = ConfigurationSettings.AppSettings["FckEditor:BasePath"];
        }


        
public virtual int Columns
        
{
            
get
            
{
                
return this._columns;
            }

            
set
            
{
                
this._columns = value;
            }

        }


        Unit ITextEditor.Height
        
{
            
get
            
{
                
return base.Height;
            }

            
set
            
{
                
base.Height = value;
            }

        }


        
string ITextEditor.Text
        
{
            
get
            
{
                
return base.Value;
            }

            
set
            
{
                
base.Value = value;
            }

        }


        Unit ITextEditor.Width
        
{
            
get
            
{
                
return base.Width;
            }

            
set
            
{
                
base.Width = value;
            }

        }


        
public virtual bool EnableHtmlModeEditing
        
{
            
get
            
{
                
return this._enableHTML;
            }

            
set
            
{
                
this._enableHTML = value;
            }

        }


        
public string GetClientSideMethod
        
{
            
get
            
{
                
return "";
            }

        }


        
public virtual bool IsRichTextCapable
        
{
            
get
            
{
                
return base.CheckBrowserCompatibility();
            }

        }


        
public virtual int Rows
        
{
            
get
            
{
                
return this._rows;
            }

            
set
            
{
                
this._rows = value;
            }

        }


        
public virtual string StyleName
        
{
            
get
            
{
                
if (this._styleName == null)
                
{
                    
this._styleName = "Default";
                }

                
return this._styleName;
            }

            
set
            
{
                
this._styleName = value;
                
base.SkinPath = base.BasePath + "editor/skins/" + value + "/";
            }

        }



    }

}


然后将这个类库编译,拷贝生成的dll到cs的bin目录,同时将fckEditor的源码下载下来,注意要包括.net源码,将代码高亮的类放进去,以便使其中的代码高亮插件生效,然后也重新编译fckeditor,忘记说了,这个工作要放在FCK.cs前面,因为有dll版本依赖。

 

namespace FredCK.FCKeditorV2
{
    
using System;
    
using System.Collections;
    
using System.IO;
    
using System.Text.RegularExpressions;

    
public class HighLighter
    
{
        
public HighLighter()
        
{
            
this.replaceEnter = false;
        }


        
public string colorText(string tmpCode, string pathToDefFile, string language)
        
{
            language 
= language.ToLower();
            
if ((language == "c#"|| (language == "csharp"))
            
{
                language 
= "cs";
            }

            language 
= language.Replace(""""");
            
string text1 = "";
            
string text2 = "";
            
bool flag1 = true;
            ArrayList list1 
= new ArrayList();
            ArrayList list2 
= new ArrayList();
            
try
            
{
                StreamReader reader1 
= new StreamReader(pathToDefFile + language.ToString() + ".def");
                
string text3 = "";
                
string text4 = "";
                
while (reader1.Peek() != -1)
                
{
                    text3 
= reader1.ReadLine();
                    
if (text3 != "")
                    
{
                        
if (text3.Substring(01== "-")
                        
{
                            
if (text3.ToLower().IndexOf("keywords"> 0)
                            
{
                                text4 
= "keywords";
                            }

                            
if (text3.ToLower().IndexOf("keytypes"> 0)
                            
{
                                text4 
= "keytypes";
                            }

                            
if (text3.ToLower().IndexOf("comments"> 0)
                            
{
                                text4 
= "comments";
                            }

                        }

                        
else
                        
{
                            
switch (text4)
                            
{
                                
case "keywords":
                                    list1.Add(text3);
                                    
break;

                                
case "keytypes":
                                    list2.Add(text3);
                                    
break;

                                
case "comments":
                                    text2 
= text3;
                                    
break;
                            }

                        }

                    }

                }

                reader1.Close();
            }

            
catch (Exception exception1)
            
{
                exception1.ToString();
                text1 
= "<span class="errors">There was an error opening file " + pathToDefFile + language.ToString() + ".def...</span>";
                flag1 
= false;
                
throw new ApplicationException(string.Format("There was an error opening file {0}{1}.def", pathToDefFile, language), exception1);
            }

            
if (!flag1)
            
{