discuz是一个开源软件,我们是使用这个软件做论坛管理的,简单介绍一下discuz的代码的一个组织架构,供需要的人拿去参考。。。
1.discuz目录结构的
目录结构:
/api uc.php UCenter通信文件 /api/addons应用中心 /api/connect腾讯互联 /api/googleGoogle引擎接口处理 /api/javascript数据和广告的 JS调用 /api/manyoumanyou应用及搜索等相关服务 /api/remote远程更新? /api/trade支付宝、财付通等交易接口 /archiver论坛Archiver静态化 /config程序配置文件 config_global.php论坛核心参数配置文件 config_ucenter.phpUCenter核心参数配置文件 config_global_default.php论坛核心参数配置文件(例子) config_ucenter_default.phpUCenter核心参数配置文件(例子) /data附件数据、数据库与文件缓存 /install安装程序 /source/ 程序模块功能处理目录 /discuz_version.php 程序版本号存放文件 /source/admincp 后台管理查看该目录文件标注 /source/archiver论坛Archiver静态化程序目录查看该目录文件标注 /source/include程序功能处理目录查看该目录文件标注 /source/language程序语言包(如不清楚,请打开各个文件查看)查看该目录文件标注 /source/module程序功能模块程序包查看该目录文件标注 /source/plugin插件程序扩展目录查看该目录文件标注 /source/functionDX自定义函数库查看该目录文件标注 /source/class核心类库查看该目录文件标注 /template模板目录查看该目录文件标注 /uc_client UCenter客户端 /uc_server UCenter服务端 /static程序界面元素附件存放目录 根目录文件 admin.php后台入口文件 api.php合作API输出 archiver论坛Archiver阅读模式(无图版) connect.php云平台接口文件 cp.php多应用服务入口文件(加载userapp.php) crossdomain.xml favicon.ico站点ICO图标 forum.php论坛频道入口文件 group.php群组频道入口文件 home.php家园频道入口文件 index.php首页 member.php用户入口文件(登录、注册、退出等) misc.php程序杂项扩展入口 plugin.php插件入口文件 portal.php门户入口文件 robots.txt搜索引擎限制文件 search.php搜索频道入口 userapp.php多应用服务入口文件
2.代码流程结构分析
首先nginx里要配置首页 和每个版块写的路由
首页默认路由到 index.php
搜索页面路由到 search.php
个人中心路由到 home.php
论坛后台路由到 admin.php
版块页面路由到 forum.php
这些文件里面都有require_once './source/class/class_core.php';该文件是对conf下的配置文件的调用,连接数据库、检查登录状态、获取登录人的信息、获取discuz的缓存数据表数据等等,下面这些代码就是一个初始化的过程:(具体里面的操作感兴趣自己去一探究竟吧)
C::app()->cachelist = $cachelist;
C::app()->init();
loadforum();
set_rssauth();
runhooks();
入口函数做了初始化之后还会根据url参数将任务分发出去,
拿forum.php为例,根据mod参数 加载require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';
forum.php (初始化) ----> source (处理) ------> template (页面展示)
相当于 mvc层逻辑
=============但是discuz最核心的处理模块在source目录下面==========================
source的代码结构见下面附件图片1
1.source/class 数据库表操作
C::t('forum_forum')->fetch($_G['fid']);改功能是数据库操作,相当于获取板块信息 具体数据库代码在source/class/table/table_forum_forum.php下面的fetch函数或者父类里面
2.source/include 程序功能处理目录
该模块根据功能进行划分
加载形式例如:require_once libfile('post/newthread', 'include');
该模块负责处理发帖任务
3.source/function 自定义函数库
该模块具有全局性,不属于某一个专用模块
加载形式例如:include template('diy:forum/viewthread'.$sufix.':'.$_G['fid']);
当所有功能处理完要加载html页面时会执行上面这句话,template函数在function_core.php里,根据参数判断要加载页面信息。
4.source/language程序语言包
function_core.php 下lang()函数根据传过来的参数找到对应的值
5.source/plugin插件程序扩展目录
api的请求,每次金币等等后期discuz或者其他人写的代码都可以以插件形式放在这里
Discuz后台工作原理
admin.php :是后台管理的入口文件, 主要做了两件事,分别是:初始化、主处理
根据参数action 分发任务
1.如果action 不存在 调用$admincp->show_admincp_main();
跳转到了require './source/admincp/admincp_main.php';
2.如果action存在, return './source/admincp/admincp_'.$action.'.php';