您现在的位置是:首页 > cms教程 > discuz教程discuz教程
Discuz!NT初始化过程代码分析
秦树琪2025-07-02 15:31:32discuz教程已有4人查阅
导读Discuz!NT论坛程序具有强大的配置功能 :从论坛的标题到论坛各个地方的显示,论坛模板的使用等等。要弄明白DNT页面的显示过程,首先应知道ASP.NET页面事件的引发顺序。
Discuz!NT论坛程序具有强大的配置功能 :从论坛的标题到论坛各个地方的显示,论坛模板的使用等等。
1、ASP.NET页面事件执行过程
要弄明白DNT页面的显示过程,首先应知道ASP.NET页面事件的引发顺序。今天刚到手一本书:《ASP.NET3.5SP1高级编程》,上边是这么列的: 也就是说在页面的生命周期内,ASP.NET就是按照这个顺序来执行的。当然,Page类的构造函数是最先执行的!
2、DNT页面的初始化过程
下面就以论坛首页(forumindex.aspx)的显示过程看一下DNT页面显示时是怎样将配置应用到页面中的。
首先,看该页的第一行: Inherits="Discuz.Web.forumindex":说明该页继承自Discuz.Web.forumindex这个类。这个类位于文件forumindex.aspx.cs中。
打开这个文件,可以看到这样的代码: PageBase 继承自Page类,是DNT所有页面的基类。在文件forumindex.aspx.cs的forumindex类中定义了一些变量和两个函数:ShowPage()和GetSpacePerm()
ShowPage函数是这样定义的: 它重写了基类PageBase中的ShowPage()函数。前面说过,构造函数在所有函数前执行,而forumindex没有定义构造函数,初始化时将只执行基类的构造函数。而PageBase在构造函数中调用了ShowPage()函数,而派生类forumindex中覆盖了这个函数。所以forumindex中的ShowPage要在ASP.NET生命周期内的9个过程之前执行!
GetSpacePerm()函数是个人空间使用的函数,与论坛内容关系不大,暂不做介绍。
3、ShowPage函数中完成的工作
在ShowPage()函数中,DNT将显示页面需要的配置信息和从数据库读取的用户信息加载到内存中,用于以后的显示。
(1)设置页面的名称 (2)加载用户组信息 (3)写Cookie (4)获取在线列表信息 (5)获取当前用户的用户信息 (6)获取前台板块列表谈出菜单 (7)获取论坛的统计信息 (8)获取在线用户列表 (9)获取论坛公告 (10)从数据库中加载广告信息 广告方式还真多。
这些信息加载完之后,就可以在页面中显示了。
4、将页面显示出来(OnInit函数)
在 forumindex.aspx.cs的代码中没有一行是想浏览器输出的函数!加载了那么多信息之后,在哪显示呢?
打开文件首页的ASPX文件forumindex.aspx,可以看到字样的代码: OnInit对应于页面生命周期中的Init过程。DNT的PageBase类和其他页面类均有这样的函数。这个函数主要用于根据刚才加载的信息,向浏览器输出内容。
在OnInit()函数中DNT使用一个StringBuilder组织需要显示的内容,之后用Response.Write(templateBuilder.ToString());将内容输出到浏览器!
DNT的配置 功能都是在组织页面的这个StringBuilder中加入的!多完美!无缝加入!呵呵
附:关于DNT模板引擎的猜想
在OnInit()函数的执行过程中,DNT根据根据加载的信息,判断哪些内容是用户有权限查看的梦哪些内容用户没有权限查看。但像这样的写法实在是累,还容易出问题!看看DNT怎么做的吧: 人家有模板引擎,自动生成的!我在想,为什么它能自动生成呢?因为DNT的一切配置信息预先都设置好了。调用方法明确,函数名称清晰稳定。不需要再更改什么了!所以页面生成整个过程可能是这样的:
(1)总体设计时,明确哪些功能是可配置的。同时也明确实现这些配置功能的类。
(2)写配置函数。
(3)由页面设计者和美工做好完全功能的页面。
(4)整合。从页面文件中读取每一行的内容,加入判断信息后,添加到页面类的OnInit()函数中。
教我C# 的那个同事说DNT的架构师很牛!我写页面这么做跟架构师有关吧,架构师在设计之初就想到了这些功能!
1、ASP.NET页面事件执行过程
要弄明白DNT页面的显示过程,首先应知道ASP.NET页面事件的引发顺序。今天刚到手一本书:《ASP.NET3.5SP1高级编程》,上边是这么列的: 也就是说在页面的生命周期内,ASP.NET就是按照这个顺序来执行的。当然,Page类的构造函数是最先执行的!
2、DNT页面的初始化过程
下面就以论坛首页(forumindex.aspx)的显示过程看一下DNT页面显示时是怎样将配置应用到页面中的。
首先,看该页的第一行: Inherits="Discuz.Web.forumindex":说明该页继承自Discuz.Web.forumindex这个类。这个类位于文件forumindex.aspx.cs中。
打开这个文件,可以看到这样的代码: PageBase 继承自Page类,是DNT所有页面的基类。在文件forumindex.aspx.cs的forumindex类中定义了一些变量和两个函数:ShowPage()和GetSpacePerm()
ShowPage函数是这样定义的: 它重写了基类PageBase中的ShowPage()函数。前面说过,构造函数在所有函数前执行,而forumindex没有定义构造函数,初始化时将只执行基类的构造函数。而PageBase在构造函数中调用了ShowPage()函数,而派生类forumindex中覆盖了这个函数。所以forumindex中的ShowPage要在ASP.NET生命周期内的9个过程之前执行!
GetSpacePerm()函数是个人空间使用的函数,与论坛内容关系不大,暂不做介绍。
3、ShowPage函数中完成的工作
在ShowPage()函数中,DNT将显示页面需要的配置信息和从数据库读取的用户信息加载到内存中,用于以后的显示。
(1)设置页面的名称 (2)加载用户组信息 (3)写Cookie (4)获取在线列表信息 (5)获取当前用户的用户信息 (6)获取前台板块列表谈出菜单 (7)获取论坛的统计信息 (8)获取在线用户列表 (9)获取论坛公告 (10)从数据库中加载广告信息 广告方式还真多。
这些信息加载完之后,就可以在页面中显示了。
4、将页面显示出来(OnInit函数)
在 forumindex.aspx.cs的代码中没有一行是想浏览器输出的函数!加载了那么多信息之后,在哪显示呢?
打开文件首页的ASPX文件forumindex.aspx,可以看到字样的代码: OnInit对应于页面生命周期中的Init过程。DNT的PageBase类和其他页面类均有这样的函数。这个函数主要用于根据刚才加载的信息,向浏览器输出内容。
在OnInit()函数中DNT使用一个StringBuilder组织需要显示的内容,之后用Response.Write(templateBuilder.ToString());将内容输出到浏览器!
DNT的配置 功能都是在组织页面的这个StringBuilder中加入的!多完美!无缝加入!呵呵
附:关于DNT模板引擎的猜想
在OnInit()函数的执行过程中,DNT根据根据加载的信息,判断哪些内容是用户有权限查看的梦哪些内容用户没有权限查看。但像这样的写法实在是累,还容易出问题!看看DNT怎么做的吧: 人家有模板引擎,自动生成的!我在想,为什么它能自动生成呢?因为DNT的一切配置信息预先都设置好了。调用方法明确,函数名称清晰稳定。不需要再更改什么了!所以页面生成整个过程可能是这样的:
(1)总体设计时,明确哪些功能是可配置的。同时也明确实现这些配置功能的类。
(2)写配置函数。
(3)由页面设计者和美工做好完全功能的页面。
(4)整合。从页面文件中读取每一行的内容,加入判断信息后,添加到页面类的OnInit()函数中。
教我C# 的那个同事说DNT的架构师很牛!我写页面这么做跟架构师有关吧,架构师在设计之初就想到了这些功能!
本文标签:
很赞哦! (0)
上一篇:Discuz论坛搭建步骤方法教程
下一篇:discuz登录流程分析
暂无内容 |
暂无内容 |
暂无内容 |
暂无内容 |
随机图文
Linux环境怎么搭建Discuz论坛
在Nginx服务器下面配置bbs的Vhostsvim /usr/local/nginx/conf/nginx.conf -->添加includechown -R nginx.nginx bbs/ -->涉及用户提交头像等操作,简单起见,先改为nginx,后进行修改Discuz密码加密方式是怎么样的?
一般我们的加密都是采用md5加密方式:md5(变量)。但是昨天需要整合discuz的论坛,看他的加密方式也像是md5,但是简单的123加密后竟然解密不出来。discuz3.x ssrf漏洞分析
漏洞促发点\souce\module\forum\forum_ajax.php之后看到了这里看名字看出应该是个远程下载图片的功能。preg_match_all会匹配完整的字符串把他输出到array[0]中然后array[1]中存放Discuz X3.1论坛前台使用方法介绍
论坛首页是用户访问论坛时,进入到的第一个页面。它汇集了论坛分区、版块、子版块等核心元素,展示了论坛帖子和会员汇总信息、论坛公告、论坛热点、在线会员、友情链接等丰富信息
留言与评论 (共有 0 条评论) |