Discuz!NT代码阅读笔记(1)--从HttpModule开始:首页的显示
Discuz!NT代码阅读笔记(2)--网站安装也能自动化:论坛程序安装及初始化过程
Discuz!NT代码阅读笔记(3)--网站安装也能自动化(2)--DNT安装时使用到的几个函数解析
Discuz!NT代码阅读笔记(4)-- 一切皆可配置:页面的显示
Discuz中有24个Project,每个项目各自作为项目架构中的不同的功能。下面我们来各自的分析一下这些项目。
图(1)DNT中包含的项目
(1)Discuz.Web
该项目是DNT最终生成网站的项目。
图(2)Discuz.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是配置文件,没啥好说的。
(2)Discuz.Aggregation
这个项目是聚合数据项目。定义了一些当论坛首页选者为“聚合首页”时需要用到哦的功能。
当设定论坛首页为聚合首页时,显示的页面是Discuz.Web项目中Aspx下模板文件夹中的website.aspx文件打开这个文件可以看到它使用了很多Aggregation中提供的方法。
(3)Discuz.Album
DNT的相册功能。这个项目中提供了一些与DNT相册功能有关的函数和字段的定义。DNT.Web项目中的模板中没有与其对应的东西。因为相册对于DNT论坛来讲相当于是一个插件,需要在论坛安装完毕后单独安装。相册插件安装后,这个项目生成的东西就可以用了。我还没有升级相册用的模板,暂时不做分析,因为前后台功能对不上,我猜不出来这些都是做什么用的。
(4)Discuz.Cache
该项目提供对DNT的缓存进行控制和管理的方法。CacheKeys类中定义了可以进行缓冲的页面和元素。DefaultCacheStrategy提供了对缓存进行管理的方法,如定义缓存的有效期,加载缓存等。DNTCache类提供了对DNT论坛缓存进行全局控制管理的方法。
这些方法是怎样实现的我暂时还理解不了,就不逞能了。
(5)Discuz.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只是一个论坛程序,却也是麻雀虽小,五脏俱全。想起了吉日旮旯兄的的一篇博客,说的是平时的积累对开发的重要性。
(6)Discuz.Config
这个项目主要提供了一些配置信息的封装、读写类。
聚合首页,相册,API,整合程序配置,论坛快照,Email配置管理,FTP配置管理等等一些类。这些配置信息都以XML的形式存放在安装程序的config文件夹中(.config后缀)。这个项目中涉及了很多XML操作和文件操作,在以后的文章中会详细介绍。
注:昨晚上网,看见DNT又更新了。说是改了些BUG,版本号没变还是3.1。更新挺快的,我还是以我现在的的版本看代码。