编程浪子的博客

碌碌无为终为过

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Discuz!NT代码阅读笔记(1)--从HttpModule开始:首页的显示

Discuz!NT代码阅读笔记(2)--网站安装也能自动化:论坛程序安装及初始化过程

Discuz!NT代码阅读笔记(3)--网站安装也能自动化(2)--DNT安装时使用到的几个函数解析

Discuz!NT代码阅读笔记(4)-- 一切皆可配置:页面的显示

Discuz中有24Project,每个项目各自作为项目架构中的不同的功能。下面我们来各自的分析一下这些项目。

clip_image001

(1)DNT中包含的项目                                   

1Discuz.Web

该项目是DNT最终生成网站的项目。

clip_image002

图(2Discuz.Web中的内容

Aspx文件夹存放了DNT的网站模板,前面提到在首页显示前的HttpModule处理函数中,有个地址重写的函数:

private void ReUrl_BeginRequest(object sender, EventArgs e)

{

。。。。。。。。。。。

           //对首页的请求重定向到forumindex.aspx

           if (requestPath.EndsWith("/index.aspx"))

           {

               if (config.Indexpage == 0)

               {

                   if (config.BrowseCreateTemplate == 1)

                   {

                       CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, "forumindex.aspx", int.Parse(strTemplateid));

                   }

                   context.RewritePath(forumPath + "aspx/" + strTemplateid + "/forumindex.aspx");

               }

               else

               {

                   if (config.BrowseCreateTemplate == 1)

                   {

                       CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, "website.aspx", int.Parse(strTemplateid));

                   }

                   context.RewritePath(forumPath + "aspx/" + strTemplateid + "/website.aspx");

               }

               return;

           }

。。。。。。。。。。。

}

这段代码中context.RewritePath(forumPath + "aspx/" + strTemplateid + "/ forumindex.aspx ");是将对首页的请求重定向到指定页面。strTemplateid就是存放在该文件夹中的模板的ID

config文件夹存放论坛的配置信息。论坛配置文件以XML的形式存放在.config配置文件中。

UI文件夹存放了显示页面的基类CS文件。Aspx存放的模板隐藏或基层了这些类。

index.aspx文件就是一个普通的文件,什么都不做,占着位置。当有对他的请求时,就根据配置跳转到指定模板文件夹的页。

DNT.config存放了数据库的配置信息。里边存放了数据库的连接字符串、表的前缀、论坛的虚拟路径、数据库类型、模板号信息。

Web.config是配置文件,没啥好说的。

2Discuz.Aggregation

这个项目是聚合数据项目。定义了一些当论坛首页选者为“聚合首页”时需要用到哦的功能。

当设定论坛首页为聚合首页时,显示的页面是Discuz.Web项目中Aspx下模板文件夹中的website.aspx文件打开这个文件可以看到它使用了很多Aggregation中提供的方法。

3Discuz.Album

DNT的相册功能。这个项目中提供了一些与DNT相册功能有关的函数和字段的定义。DNT.Web项目中的模板中没有与其对应的东西。因为相册对于DNT论坛来讲相当于是一个插件,需要在论坛安装完毕后单独安装。相册插件安装后,这个项目生成的东西就可以用了。我还没有升级相册用的模板,暂时不做分析,因为前后台功能对不上,我猜不出来这些都是做什么用的。

4Discuz.Cache

该项目提供对DNT的缓存进行控制和管理的方法。CacheKeys类中定义了可以进行缓冲的页面和元素。DefaultCacheStrategy提供了对缓存进行管理的方法,如定义缓存的有效期,加载缓存等。DNTCache类提供了对DNT论坛缓存进行全局控制管理的方法。

这些方法是怎样实现的我暂时还理解不了,就不逞能了。

5Discuz.Common

这个项目是其他项目提供了一些助手、工具,提供了一些基础性的方法供其他项目调用。这些方法很通用,你甚至可以不用改就在你自己的项目中使用(版权问题,不提倡哦)。如:

MD5函数:public static string MD5(string str)

SHA256函数:public static string SHA256(string str)

SQL字符串检查函数:public static bool IsSafeSqlString(string str)

检测是否有危险的可能用于链接的字符串的函数:public static bool IsSafeUserInfoString(string str)

改正sql语句中的转义字符函数:public static string mashSQL(string str)

脏字过滤函数:public static string StrFilter(string str, string bantext)

构建伪静态页码显示链接:public static string GetStaticPageNumbers(int curPage, int countPage, string url, string expname, int extendPage, int forumrewrite)

这是个很有参考价值的函数,呵呵。

判断文件流是否为UTF8字符集:private static bool IsUTF8(FileStream sbInputStream)

返回相差的秒数函数:public static int StrDateDiffSeconds(string Time, int Sec)

返回相差的分钟数函数:public static int StrDateDiffMinutes(string time, int minutes)

返回指定IP是否在指定的IP数组所限定的范围内:public static bool InIPArray(string ip, string[] iparray)

cookie值:public static void WriteCookie(string strName, string strValue)

cookie值:public static string GetCookie(string strName)

过滤HTML中的不安全标签函数:public static string RemoveUnsafeHtml(string content)

将全角数字转换为数字函数:public static string SBCCaseToNumberic(string SBCCase)

XML操作:读写、RSS生成等

图像操作:生成缩略图、计算图片尺寸等

FTP操作:打开关闭FTP连接、获取FTP当前目录下的文件列表、获取获取到文件名列表、FTP上创建目录删除目录,删除重命名FTP文件,FTP上传文件下载文件等。继续研究,还有更多的类供探索。。。。

DNT只是一个论坛程序,却也是麻雀虽小,五脏俱全。想起了吉日旮旯兄的的一篇博客,说的是平时的积累对开发的重要性。

6Discuz.Config

这个项目主要提供了一些配置信息的封装、读写类。

聚合首页,相册,API,整合程序配置,论坛快照,Email配置管理,FTP配置管理等等一些类。这些配置信息都以XML的形式存放在安装程序的config文件夹中(.config后缀)。这个项目中涉及了很多XML操作和文件操作,在以后的文章中会详细介绍。

 

注:昨晚上网,看见DNT又更新了。说是改了些BUG,版本号没变还是3.1。更新挺快的,我还是以我现在的的版本看代码。

  

Technorati 标签: DNT
posted on 2010-05-06 21:54  编程浪子_  阅读(1520)  评论(1编辑  收藏  举报