|
Discuz 系列建站软件(以下简称DZ)是目前国内部署最为广泛的建站系统,经过多年的发展,已成为集CMS、Forum、Blog等功能为一体的社区系统,并具备完善的插件和模板机制,使得针对DZ进行二次开发变得非常有效率。下文就 DZ 的整体架构和内核运行流程作一个简单分析,以帮助初学者尽快掌握 DZ 二次开发的方法和技巧。
阅读本文之前可以先参考下 Dz 官方提供的文档,官方文档写得比较简明概要,但已经覆盖了二次开发所需要的大部分内容
Discuz!资料库
以下进入正文:
一、DZ 调用流程
请先阅读官方文档:目录结构
假设新安装完成的 Dz 站点的访问 URL 为:http://www.dztest.com/,则默认会首先执行根目录下的 index.php 文件,此脚本文件的主要作用就是判断下一步将要跳转到的模块,新装系统的默认值通常是 forum.php,即脚本的执行将进入 forum.php 或者其他入口模块,比如:portal.php、home.php、plugin.php 等等。
以 forum.php 为例,进入模块通常会首先加载内核代码,通过加载 class_core.php 即可,参考源码:- require './source/class/class_core.php';
复制代码 在内核代码中,会完成 Dz 对象的实例化,官方文档对于内核的加载介绍的很少,参见:class_core.php 流程控制的说明
内核代码加载完成后,接着加载对应模块的代码,包括对应的函数库、相关类库等等;比如 forum 模块就会加载:- require './source/function/function_forum.php';
复制代码 再往后会根据用户操作选择加载对应的子模块用于处理数据提交或者页面展示。
Dz 每个大模块都是有很多子模块构成,访问或者调用这些子模块通常都是通过 URL 传参数来实现,比如:论坛版块(Forum)可以有论坛版块展示或者帖子内容展示等不同的操作,论坛版块展示则通过加载 forumdisplay 模块来实现,参考源码:- require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';
复制代码 其中 $mod 的值就是 forumdisplay,而如果当前操作是帖子内容展示,则 $mod 的值为 viewthread。
再往下还有更加细分的模块,通常用于完成一些具体的操作,比如在 viewthread 的时候是允许用户对帖子进行回复的,这个回复操作也是通过加载对应的子模块来实现,参考代码:- require_once libfile('post/newreply', 'include');
复制代码 此代码表达的意思为:加载 ./source/include/post/post_newreply.php 文件。
Discuz 调用实例:1、”http://www.bacysoft.cn/forum.php?mod=viewthread&tid=57“
入口文件:forum.php, /forum.php
模块文件:viewthread,/source/module/forum/forum_viewthread.php
其他参数:tid, 帖子ID号
此 url 用于展示指定 tid 的帖子内容;同时此页面还包含了一个回复表单,表单的 action 参数见实例2 .
2、“forum.php?mod=post&action=reply&fid=41&tid=18&extra=page%3D1&replysubmit=yes&infloat=yes&handlekey=fastpost”
入口文件:forum.php
模块文件:post, /source/module/forum/forum_post.php
操作(action): reply, require_once libfile('post/newreply', 'include'); /source/include/post/post_newreply.php
其他参数:fid(论坛ID)、tid(帖子ID)、replysubmit(提交参数)、infloat(字面理解是是否浮动的意思)、handlekey(前端JS回调函数,succeedhandle_fastpost,errorhandle_fastpost);
|
|