您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > DiscuzX32教程
DiscuzX3.2教程插件制作的基本思路是:(初学者适用)1.形成插件思路2.制作插件界面3.构架程序模块4.搭建存储数据5.填充功能语句6.检查应用错误7.完善插件功能前言:为方便互联网数万Discuz!爱好者,更加深入了解Discuz!软件,本人在熟悉Discuz!过程中,顺便将个人经验写给大家。本贴内容由本人定期更新。本贴只介绍Discuz!中部分技术点,本贴紧属个人观点,不足之处,请各位多多指教,在下先此谢过!。“Discuz!”在下文中简称“DZ”。要弄DZ二次开发,必须至少具备如下技能:1)能够理很好理解MVC构架的原理(虽然DZ不是MVC架构的)2)扎实的PHP基础,熟悉结构化程序,OOP程序的写法及应用3)熟悉MYSQL就用,掌握SQL语言,懂SQL优化者更佳4)熟悉使用Discuz!的各项功能一)Discuz!的文件系统目录注:想搞DZ开发,就得弄懂DZ中每个文件的功能。a)Admin:后台管理功能模块b)Api:DZ系统与其它系统之间接口程序c)Archiver:DZ中,用以搜索引擎优化的无图版d)Attachments:DZ中,用户上传附件的存放目录e)Customavatars:DZ中,用户自定义头像的目录f)Forumdata:DZ缓存数据的存放目录g)Images:DZ模板中的图片存放目录h)Include:DZ常用函数库,基本功能模块目录i)Ipdata:DZ统计IP来路用的数据j)Plugins:DZ插件信息的存放目录k)Templates:DZ模板文件的存放目录l)Wap:DZ无线,Wap程序处理目录二)必须记熟Discuz!数据库设计的每个表的功能,每个表中每个字段的功能。关于DZ数据库设计文档,请参阅DZ相关的项目文档(请从本贴附件中下载)三)Discuz!的流程控制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文件b)前台流程控制:前台的流程控制比较简单:流程是自由的,如:首页:index.php会员注册:register.php;会员登录:logging.php发贴程序:post.php会员信息:member.php论坛内容:forumdisplay.php查看贴子:member.php…大部分功能,此处不一一列出…c)DZ根目下的config.inc.php属于整个DZ系统的配置文件四)Discuz!的数据处理过程a)DZ对mysql的数据库操作处理全部封装在dbstuff(db_mysql.class.php)类中b)所在的外部数据均通过“daddslashes()”初步过滤,然后再过滤,再根据需要处理五)Discuz!的显示控制(网站多样式风格输出)a)显示层就是大家通常所看到的网站风格了。DZ中每套风络分别在templates及images下对应一个风格文件的存放目录。网站风格的制作,请参阅详细的DZ风格制作文档b)DZ网站风格文件处理的原理:其实很简单,DZ使用template.func.php中的parse_template()以PHP正则运算把htm模文件中的模板标签,转换成了PHP代码,并根据styleid保存在forumdata/templates下,这个有点像Smarty中的技术。六)DZ中的语言处理a)DZ前台及后台中、英语言的实现,均是把语句定义成了语变量,然后在模板输入,语句变量的赋值,均放在模板目录中的*.lang.php文件中,DZ在生成网站风格时就加载了这相应的语言包。七)DZ如何处理用户信息(存取、计算、更新过程)新手要做二次开发,都必须掌握这数组中,每个数组元素的意义。a)DZ的基本信息,如用户信息,Session信息存在如下变量中:a).$_DCACHEb).$_COOKIEc).$_DCOOKIEd).$_DSESSIONe).$_DPLUGINb)可以通过print_r($GLOBALS),打印全部变量八)DZ中缓存处理机制a)DZ中缓存处理过程都放在“cache.func.php”中,DZ的缓存处理比较简单,其原理是把一个数组转换成了PHP代码,并保存在缓存目录下,大家可打开缓存文件查看便知。b)使用方法:如果在新开的功能中,需要缓存某部分数据,基本上就是:1)定义并注册缓存名字。2)从数据读取相应的数据。3)数据在写入缓存前作相应处理。4)最后写入缓存。具体操作,可以看文件中的代码,做相应的修改即可九)DZ中模板处理机制a)DZ独创的模板处理技术,类似于Smarty中的模板处理,只是具体算法,过程不同,Smarty是一种重型模板引擎方案。其原理都是把模板中的变量转换成相应的PHP代码,这个过程实际是模访JAVA中的一次编译,多处运行。十)DZ中权限处理机制a)对于DZ中前台的每相action都有$discuz_action定义,DZ根据用户所在的用户组来判定用户是否具有相应操作$discuz_action的权限。至于后台的权限权验证,则更简单了,依据“admin==1”来确定的十一)DZ中如何实现URL静态化a)DZ中的静态有两法,只要懂ReWrite规划的朋友,一看就知。十二)DZ独创的HTML编辑器,如何截取并使用,如果进行Discuz!代和Html代码的转换a)这也算是DZ比较牛的一项技术了,在早期版中,因DZ编辑器的不足,使得很多用户放弃了DZ。实现原理:通过JS把用的一些操作转换成了DZ的bbcode代码。这样子提交了安全性,将带有bbcode代码的内容存入数据,在用户打开页页时,又把bbcode代码转换成html代码本贴声明:由于时间有限,本贴只有关于DZ部分功能的简短分析。若各位网友,对本文感兴趣并想更为深入了解DZ,请在本贴后回贴!我将尽可能多的DZ技术分析写在本文,不断更新本贴内容。部分文件说明:admincp.php管理ajax.phpajax功能announcement.php公告attachment附件board.php真正的首页config.inc.php这个是配置文件corpus.php论坛文集digest.php精华帖子discuz_version.php论坛版本号faq.php问题列表forumdisplay.php论坛列表index.php跳转页面loggin.php认证页面(登录退出)mail_config.inc.php邮件配置member.php用户操作memcp.php个人控制面版misc.php零碎功能my.php我的帖子plugin.php插件pm.php短信post.php发送帖子redirect.php页面重定向register.php注册robots.txt限制搜索rss.phprss信息发布search.php论坛查询secode.php验证码stats.php统计topic.php首页论坛专题topicadmin主题管理viewpro.php显示个人信息viewthread.php主题显示文件夹admin管理api接口archiver文档attachments附件customavatars自定义表情forumdata论坛数据包含缓冲数据images图片include公共文件install安装包ipdataip地址plugins插件readme帮助文档templates模板utilities工具包wap手机网站文件夹includeadvertisements.inc.php广告管理ajax.jsajax相关attachment.func.php附件函数集bbscode.js论坛表情cache.fun.php缓存函数集category.inc.php栏目chinese.class.phpcommon.inc.php最主要的头文件common.js最主要的js文件corpus.func.php论坛文集函数counter.inc.php论坛计数cron.func.php计划任务db_mysql.class.php数据库db_mysql_error.inc.php数据库错误debug.php调试信息discuzcode.func.php论坛代码editor.func.php编辑器editor.js编辑器editpost.inc.php编辑帖子floatadv.js浮动广告forum.func.php论坛函数集global.func.php全局函数menu.js菜单misc.func.php其它newreply.inc.php新回复newthread.inc.php新主题*pmprompt.inc.phppost.fun.php发表主题printable.inc.php论坛打印qihoo.jsqihoorelatethreads.inc.php相关主题security.inc.php安全sendmail.inc.php邮件serverbusy.htm系统繁忙template.func.php模板threadpay.inc.php购买帖子为什么文件的命名有inc呢?文件命名规范Discuz!按照如下的规范对程序和模板进行命名,请在设计插件时尽量遵循此命名规范:1.可以直接通过浏览器访问的普通程序文件,以.php后缀命名。2.被普通程序文件引用的程序文件,以.inc.php后缀命名。3.被普通程序文件,或引用程序文件引用的函数库或类库,以.func.php(函数库)或.class.php(类库)后缀命名。4.模板文件,以.htm后缀命名,模板文件只存在于./templates目录中。5.模板语言包文件,以.lang.php后缀命名,语言包文件只存放于./templates目录中,与模板文件同级目录。6.被编译后的模板文件,以.tpl.php后缀命名,前面的数字是模板套系的ID,下划线后面的是模板原名,编译模板文件只存在于./forumdata/templates目录中。7.动态缓存文件,存放于./forumdata/cache目录中,依据不同的功用进行独立的命名。8.使用后台数据备份功能生成的备份文件,通常以.sql为后缀,存放于./forumdata/目录中。9.有些目录中存在内容为空白的index.htm文件,此类文件是为了避免Web服务器打开DirectoryIndex时可能产生的安全问题。模块类型:插件模块和自定义菜单:插件接口默认提供四种可选的模块方式:1.直接链接(前台菜单):可在前台右上角加入一个菜单项,可自主指派菜单链接的URL。注意:由于引用外部程序,因此即便设置了模块的使用等级,您的程序如需权限判断,仍需要引用common.inc.php和插件相关的缓存文件(将在后面的《参数读取与缓存控制》中详细说明),并自行判断使用等级是否合法;2.前台调用(前台菜单):与直接链接类似,但其调用的是插件的一个模块,模块文件名指派为“./plugins/插件目录/插件模块名.inc.php”,由plugin.php调用此模块,调用URL将在后面的《编写插件的原则与注意事项》中详细说明;3.后台调用(后台菜单):可在后台插件设置中为此插件增添一个管理模块,模块文件名指派为“./plugins/插件目录/插件模块名.inc.php”,由admincp.php调用此模块,调用URL将在后面的《编写插件的原则与注意事项》中详细说明;4.包含运行(无菜单):可设置一个在论坛所有页面均包含运行的脚本,此脚本在./include/common.inc.php中加载,脚本文件名指派为“./plugins/插件目录/插件模块名.i
本文标题:DiscuzX32教程
链接地址:https://www.777doc.com/doc-2870443 .html