Discuz二次开发基本知识总结
<p><strong>一) Discuz!的文件系统目录</strong></p>
<p>
注:想搞DZ开发,就得弄懂DZ中每个文件的功能。</p>
<p>
a) Admin:后台管理功能模块</p>
<p>
b) Api:DZ系统与其它系统之间接口程序</p>
<p>
c) Archiver:DZ中,用以搜索引擎优化的无图版</p>
<p>
d) Attachments:DZ中 ,用户上传附件的存放目录</p>
<p>
e) Customavatars:DZ中,用户自定义头像的目录</p>
<p>
f) Forumdata:DZ缓存数据的存放目录</p>
<p>
g) Images:DZ模板中的图片存放目录</p>
<p>
h) Include:DZ常用函数库,基本功能模块目录</p>
<p>
i) Ipdata:DZ统计IP来路用的数据</p>
<p>
j) Plugins:DZ插件信息的存放目录</p>
<p>
k) Templates:DZ模板文件的存放目录</p>
<p>
l) Wap:DZ无线,Wap程序处理目录</p>
<p>
<strong>二) 必须记熟Discuz!数据库设计的每个表的功能,每个表中每个字段的功能。</strong></p>
<p>
关于DZ数据库设计文档,请参阅DZ相关的项目文档(请从本贴附件中下载)</p>
<p>
<strong>三) Discuz!的流程控制</strong></p>
<p>
a) 后台流程控:DZ后台所有的功能,均需要注册到admincp.php文件,每个功能都至少有一个或一个以上的Action(动作),在admincp.php中,可以定义Action的执行权限,分别为:“admin==1”管理员,或“admin==2 || admin==3”超级版主和版主,每个Action对应一个脚本文件,脚本文件的命名为action.inc.php(*.inc.php),并存放在admin目录下,如执行:admincp.php?action=dodo,相当于执行admin目录下的dodo.inc.php文件</p>
<p>
b) 前台流程控制:前台的流程控制比较简单:流程是自由的,如:</p>
<p>
首页:index.php</p>
<p>
会员注册:register.php;</p>
<p>
会员登录:logging.php</p>
<p>
发贴程序:post.php</p>
<p>
会员信息:member.php</p>
<p>
论坛内容:forumdisplay.php</p>
<p>
查看贴子:viewthread.php</p>
<p>
…大部分功能,此处不一一列出…</p>
<p>
c) DZ根目下的config.inc.php属于整个DZ系统的配置文件</p>
<p>
<strong>四) Discuz!的数据处理过程</strong></p>
<p>
a) DZ对mysql的数据库操作处理全部封装在dbstuff(db_mysql.class.php)类中</p>
<p>
b) 所在的外部数据均通过“daddslashes()”初步过滤,然后再过滤,再根据需要处理</p>
<p>
<strong>五) Discuz!的显示控制(网站多样式风格输出)</strong></p>
<p>
a) 显示层就是大家通常所看到的网站风格了。DZ中每套风络分别在templates及images下对应一个风格文件的存放目录。网站风格的制作,请参阅详细的DZ风格制作文档</p>
<p>
b) DZ网站风格文件处理的原理:其实很简单,DZ使用template.func.php中的parse_template()以PHP正则运算把htm模文件中的模板标签,转换成了PHP代码,并根据styleid保存在forumdata/templates下,这个有点像Smarty中的技术。</p>
<p>
六) DZ中的语言处理</p>
<p>
a) DZ前台及后台中、英语言的实现,均是把语句定义成了语变量,然后在模板输入,语句变量的赋值,均放在模板目录中的*.lang.php文件中,DZ在生成网站风格时就加载了这相应的语言包。</p>
<p>
七) DZ如何处理用户信息(存取、计算、更新过程)</p>
<p>
新手要做二次开发,都必须掌握这数组中,每个数组元素的意义。</p>
<p>
a) DZ的基本信息,如用户信息,Session信息存在如下变量中:</p>
<p>
a). $_DCACHE</p>
<p>
b). $_COOKIE</p>
<p>
c). $_DCOOKIE</p>
<p>
d). $_DSESSION</p>
<p>
e). $_DPLUGIN</p>
<p>
b) 可以通过print_r($GLOBALS),打印全部变量</p>
<p>
八) DZ中缓存处理机制</p>
<p>
a) DZ中缓存处理过程都放在“cache.func.php”中,DZ的缓存处理比较简单,其原理是把一个数组转换成了PHP代码,并保存在缓存目录下,大家可打开缓存文件查看便知。</p>
<p>
b) 使用方法:如果在新开的功能中,需要缓存某部分数据,基本上就是:</p>
<p>
1)定义并注册缓存名字。</p>
<p>
2)从数据读取相应的数据。</p>
<p>
3)数据在写入缓存前作相应处理。</p>
<p>
4)最后写入缓存。</p>
<p>
具体操作,可以看文件中的代码,做相应的修改即可</p>
<p>
九) DZ中模板处理机制</p>
<p>
a) DZ独创的模板处理技术,类似于Smarty中的模板处理,只是具体算法,过程不同,Smarty是一种重型模板引擎方案。其原理都是把模板中的变量转换成相应的PHP代码,这个过程实际是模访JAVA中的一次编译,多处运行。</p>
<p>
十) DZ中权限处理机制</p>
<p>
a) 对于DZ中前台的每相action都有$discuz_action定义,DZ根据用户所在的用户组来判定用户是否具有相应操作$discuz_action的权限。至于后台的权限权验证,则更简单了,依据“admin==1”来确定的</p>
<p>
十一) DZ中如何实现URL静态化</p>
<p>
a) DZ中的静态有两法,只要懂ReWrite规划的朋友,一看就知。</p>
<p>
十二) DZ独创的HTML编辑器,如何截取并使用,如果进行Discuz!代和Html代码的转换</p>
<p>
a) 这也算是DZ比较牛的一项技术了,在早期版中,因DZ编辑器的不足,使得很多用户放弃了DZ。实现原理:通过JS把用的一些操作转换成了DZ的bbcode代码。这样子提交了安全性,将带有bbcode代码的内容存入数据,在用户打开页页时,又把bbcode代码转换成html代码</p>
<p>
本贴声明:由于时间有限,本贴只有关于DZ部分功能的简短分析。若各位网友,对本文感兴趣并想更为深入了解DZ,请在本贴后回贴!我将尽可能多的DZ技术分析写在本文,不断更新本贴内容。</p>
<p>
部分文件说明:</p>
<p>
admincp.php 管理</p>
<p>
ajax.php ajax功能</p>
<p>
announcement.php 公告</p>
<p>
attachment 附件</p>
<p>
board.php 真正的首页</p>
<p>
config.inc.php 这个是配置文件</p>
<p>
corpus.php 论坛文集</p>
<p>
digest.php 精华帖子</p>
<p>
discuz_version.php 论坛版本号</p>
<p>
faq.php 问题列表</p>
<p>
forumdisplay.php 论坛列表</p>
<p>
index.php 跳转页面</p>
<p>
loggin.php 认证页面(登录退出)</p>
<p>
mail_config.inc.php 邮件配置</p>
<p>
member.php 用户操作</p>
<p>
memcp.php 个人控制面版</p>
<p>
misc.php 零碎功能</p>
<p>
my.php 我的帖子</p>
<p>
plugin.php 插件</p>
<p>
pm.php 短信</p>
<p>
post.php 发送帖子</p>
<p>
redirect.php 页面重定向</p>
<p>
register.php 注册</p>
<p>
robots.txt 限制搜索</p>
<p>
rss.php rss信息发布</p>
<p>
search.php 论坛查询</p>
<p>
secode.php 验证码</p>
<p>
stats.php 统计</p>
<p>
topic.php 首页论坛专题</p>
<p>
topicadmin 主题管理</p>
<p>
viewpro.php 显示个人信息</p>
<p>
viewthread.php 主题显示</p>
<p>
文件夹</p>
<p>
admin 管理</p>
<p>
api 接口</p>
<p>
archiver 文档</p>
<p>
attachments 附件</p>
<p>
customavatars 自定义表情</p>
<p>
forumdata 论坛数据包含缓冲数据</p>
<p>
images 图片</p>
<p>
include 公共文件</p>
<p>
install 安装包</p>
<p>
ipdata ip地址</p>
<p>
plugins 插件</p>
<p>
readme 帮助文档</p>
<p>
templates 模板</p>
<p>
utilities 工具包</p>
<p>
wap 手机网站</p>
<p>
文件夹include</p>
<p>
advertisements.inc.php 广告管理</p>
<p>
ajax.js ajax相关</p>
<p>
attachment.func.php 附件函数集</p>
<p>
bbscode.js 论坛表情</p>
<p>
cache.fun.php 缓存函数集</p>
<p>
category.inc.php 栏目</p>
<p>
chinese.class.php</p>
<p>
common.inc.php 最主要的头文件</p>
<p>
common.js 最主要的js文件</p>
<p>
corpus.func.php 论坛文集函数</p>
<p>
counter.inc.php 论坛计数</p>
<p>
cron.func.php 计划任务</p>
<p>
db_mysql.class.php 数据库</p>
<p>
db_mysql_error.inc.php 数据库错误</p>
<p>
debug.php 调试信息</p>
<p>
discuzcode.func.php 论坛代码</p>
<p>
editor.func.php 编辑器</p>
<p>
editor.js 编辑器</p>
<p>
editpost.inc.php 编辑帖子</p>
<p>
floatadv.js 浮动广告</p>
<p>
forum.func.php 论坛函数集</p>
<p>
global.func.php 全局函数</p>
<p>
menu.js 菜单</p>
<p>
misc.func.php 其它</p>
<p>
newreply.inc.php 新回复</p>
<p>
newthread.inc.php 新主题</p>
<p>
*pmprompt.inc.php</p>
<p>
post.fun.php 发表主题</p>
<p>
printable.inc.php 论坛打印</p>
<p>
qihoo.js qihoo</p>
<p>
relatethreads.inc.php 相关主题</p>
<p>
security.inc.php 安全</p>
<p>
sendmail.inc.php 邮件</p>
<p>
serverbusy.htm 系统繁忙</p>
<p>
template.func.php 模板</p>
<p>
threadpay.inc.php 购买帖子</p> 顶一个!LZ总结得很详细啊,对于我们这些Discuz新手来说真是太好了!
想当初我刚接触DZ二次开发的时候,完全摸不着头脑,光是搞清楚那些目录结构就花了好几天。LZ这个帖子算是给我们指了一条明路啊。
不过我有个小建议哈:
1)关于数据库设计那块,能不能具体说说几个核心表的作用?比如pre_common_member、pre_forum_thread这些表之间的关系?新人表示只看文档有点晕。
2)权限处理那里,能否举个具体的例子?比如我想在插件里判断用户是否有版主权限该怎么写?
3)缓存机制那里,LZ说的cache.func.php里的具体用法能不能详细点?每次想用缓存的时候都是照猫画虎,容易出错。
另外想问下,现在DZ都出到X3.5了,这些基础知识在新版里还适用吗?会不会有很大变化?
总之感谢LZ的分享,期待看到后续的更新! 如果LZ有时间的话,可以考虑把这些内容整理成系列教程,肯定会很受欢迎的!
頁:
[1]