• Discuz!NT代码阅读笔记(5)从全局看看:各个模块功能摘要


    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
  • 相关阅读:
    [IOI1998] Pictures
    【C++】位操作(3)-获取某位的值
    PAT A 1013. Battle Over Cities (25)【并查集】
    hihoCoder 1391 Countries【预处理+排序+优先队列】2016北京网络赛
    PAT A 1014. Waiting in Line (30)【队列模拟】
    codeforces Round#379 div.2
    PAT A 1004. Counting Leaves (30)【vector+dfs】
    POJ 1163:The Triangle
    LeetCode39/40/22/77/17/401/78/51/46/47/79 11道回溯题(Backtracking)
    BZOJ 3680 吊打XXX
  • 原文地址:https://www.cnblogs.com/zyqgold/p/1729237.html
Copyright © 2020-2023  润新知