DiscuzNT论坛源代码研究报告(1)
前言
< p>Discuz!NT则是国内第一个较为完善的基于ASP.net平台社区系统,其2.0版本在2007年底宣布开源。由于关于论坛类型的网站,我有一系列的想法,随着时间推移,想法要得以实现变得遥遥无期。独立开发一个论坛起码要花上半年时间,显然,这太过漫长,所以还是Discuz!NT的基础上做增量开发实惠一些。
准备用两个月时间研究这些代码,要达到的目标如下:
1. 对代码的架构有足够了解,检验的方式为能不看代码画出架构图
2. 清楚一个帖子的数据都保存在哪几个表中
3. 了解代码的ORMapping形式,争取将其置换为NBearLite的形式
4. 将其中的20个Project按自己喜欢的方式整合一下
5. 将其中好的控件整合进MyWebControls工程,尤其关注Calendar控件,因为以前的控件不能用在Firefox中
6. 了解此论坛插件的开发流程,看自己能否开发出一个换马甲的插件
7. 关注其中的Html在线编辑控件
8. 将论坛改装成一个支持多语言的架构,并增加对火星文的支持
注:在以后的报告里,将对Discuz!NT直接称呼为论坛
安装篇
论坛推荐安装在windows2003中,我目前是装在XP系统上的,安装时出现的唯一问题是页面出现DNT.config找不到的错误,页面提示
“发生错误: 网站根目录下没有正确的DNT.config文件”
先说一下这个问题产生的原因:
1 HttpContext context = HttpContext.Current;
2 if (context != null)
3 filename = context.Server.MapPath(“/DNT.config”);//—-这里得到的路径有问题
4 else
5 filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, “DNT.config”);
6
(表一)
< p>获得DNT.config文件的物理路径的地方如上所示,注释那句有问题。因为如果是把论坛建成一个虚拟目录,那么 context.Server.MapPath(“/”)得到的是默认网站的目录。假若网站是安装在windows 2003上,那这个不会有问题,因为windows 2003支持多个网站。但如果安装在XP上,且默认站点并没有设置成论坛的那个网站的话,那一般来说得到的路径应该是:
C:”Inetpub”wwwroot”DNT.config
而这个路径下显然没有放配置文件。
既然原因是找不到文件,那解决问题的方法就可以有多种了
1. 将DNT.config拷贝到C:”Inetpub”wwwroot”路径下,但这样会有一个问题,假如我在同一台机器上安装了两个论坛,那么现任配置文件都放在这里就会有冲突
2. 将XP的默认网站设置成论坛所在的路径,这跟第一种情况有些类似,不能解决多个论坛的问题
3. 修改代码,将论坛代码中的”/DNT.config”换成”~/DNT.config”,这样MapPath得到的路径就是相对于网站的根目录的路径,即是正确的配置文件所在的路径。可以通过搜索的方式将代码中所有的地方替换一下,总共有5处地方,大家可以试一下。
既然有了源代码,肯定是第三种方法比较好一些。但代码中5处地方都几乎引用的是同一个代码,很明显这样不是很优雅,所以我在Discuz.Common.Utils增加了一个静态函数,5处地方直接可以引用此函数:
1 ///
2 /// 得到DNT.config文件的绝对路径, added by scott jiang 2008-8-2
3 ///
4 ///
5 public static string GetDNTConfigMapPath()
6 {
7 if (HttpContext.Current != null)
8 {
9 return HttpContext.Current.Server.MapPath(“~/DNT.config”);
10 }
11 else //非web程序引用
12 {
13 return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, “DNT.config”);
14 }
15 }
16
(表二)
然后把表一中的代码换成下面的:
1 filename = Utils.GetDNTConfigMapPath();
然后重新编译,这就万事OK了。






还没有任何评论。