论坛的主页面为forum.php,论坛的各个功能都以此为入口,然后请求参数mod指定子模块。
forum.php 的代码并不多,结构简单。里面引用了两个文件./source/class/class_core.php 和 ./source/function/function_forum.php。
class_core.php 封装了discuz_application,封装了discuz运行环境的初始化工作。(后面专门讨论这个)
function_forum.php 里面基本都是与论坛相关的各个功能。
$modarray 、 $modcachelist 定义了各个子模块的名称。
之后就是discuz_appclication(即C::app())的构建和初始化工作。在app初始化之后,开加载forum,加载论坛的主框架。然后是rss授权的,之后是运行钩子,可以理解为加载钩子。
最后require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php'; 来把请求交给子模块来处理。代码如下图,有注释。
从forum.php来看,对discuz基本运行环境就行了封装,封装为C::app()。但对forum来说,依然是代码式、函数式的。既然模块都划分处理了,完全可以定义一个forum的模块类,然后实例化来处理请求。
类似于 class forum extends module{} ,然后所有的事情都交由forum来处理即可,如果想重构,这倒是个不错的思路。