discuzapi插件_插件系统分析及Discuz插件实现
⼀、Discuz介绍
Discuz是国内⽐较知名的开源论坛了,后来被腾讯收购,Discuz在设计时就考虑了⽣态体系的建设,⽀持插件设计,可以让⼴⼤开发者朋友来⼀起建设⽣态,不得不说设计者是很有商业头脑的。
回到话题,我们为什么要学习Discuz的插件设计呢,因为假如我们哪天⾃⼰想做⼀套系统,也要⽀持插件,可以借鉴下相关的设计。
源代码:
具体如何安装就不在这⾥说明了,可以参考官⽹的说明。
⼆、插件系统的需 求和场景
在分析Discuz的插件设计之前,我们还是要⼤概分析下如果设计⼀个⽀持插件的系统,系统应该⽀持哪些功能。
1、安装和反安装
插件安装的过程可能是Mysql中加⼀些表、将插件的代码覆盖放置到系统可以调⽤到的地⽅;
反安装是反过来,如何⼲净地将插件从系统中删除⾃⼰。
2、插件的启⽤和禁⽤
这个就不⽤说了,有些插件可能有些bug,或者和其它插件冲突了,需要临时禁⽤掉,后⾯修复问题再启⽤。
3、插件的加载顺序
因为插件之间可能有加载先后顺序,或者说⼀个插件依赖另⼀个插件,就需要设置插件的加载顺序了,这个应该算是⽤的⽐较少的场景。
4、插件的⾃我描述
提供插件名称等信息来描述⾃⼰。
5、可以在某个地⽅以可视化的⽅式设置插件的参数
插件⼀般来说是⽐较通⽤的,有⼀些⾃定义的参数配置,需要在⼀个地⽅设置这些插件。
6、能够将⾃⼰的接⼝注⼊到系统中
插件可能会提供⼀些接⼝,这些接⼝能够被前台的页⾯调⽤到,即在浏览器中可以访问。
7、模版的渲染能⼒
插件必须能渲染⾃⼰的页⾯,可以直接⽣成页⾯让前台⽤户访问。
8、傻⽠式的安装
因为使⽤⽹站的⼈不⼀定都懂代码,尽量简单、傻⽠式安装,不要有太多安装和运维成本。
9、完善的扩展点
⼀个设计好的插件应该提供很多扩展点,让插件能够在系统的原有流程上扩充⼀些能⼒。
举个例⼦,⽀付⽅式,可以⼀个插件提供,另⼀个插件提供⽀付宝的。
在发布帖⼦后,系统应该要有⼀种机制让插件捕捉到这个事件,以便做⼀些操作,像提⾼⽤户活跃度,增加积分等操作。
做的更灵活些,甚⾄可以提供⼀种机制替换系统的默认实现。
三、Discuz插件机制实现分析
Discuz插件都是放在 upload/source/plugin⽬录下,我们⼀个个来分析实现机制。
以下是其中⼀个插件的代码⽬录截图:
1、安装和反安装
在插件的根⽬录提供 install.php和uninstall.php,系统安装和反安装的时候调⽤相应的⽂件就⾏了。
2、插件配置
主要是以xml的⽅式提供。
xml中可以对插件加以说明,关键参数是identifier,这个是插件唯⼀标识,不能重复。
并且提供参数配置的能⼒,所有这些符合相应的规范,Discuz⾃动会加载相应的参数,并且提供保存参数和获取参数的能⼒。
3、接⼝注⼊及页⾯访问
/:sign&operation=qiandao&infloat=1&inajax=1
上⾯是访问插件 wechat中sign模块,模块以.inc.php结尾,即在插件中查 sign.inc.php,然后把请求转由该⽂件处理。
⾄于如何代码中引⼊其它⽂件,系统根⽬录通过 DISCUZ_ROOT 引⽤,plugin的⽬录也确定了,所以只要加上插件⾃⼰的⽬录就可以引⽤了。
require_once DISCUZ_ROOT . './source/plugin/wechat/wsq.class.php';
渲染页⾯也是⼀样,按上⾯的格式访问,把插件和模块传给plugin.php,然后在相应模块输出页⾯就可以达到渲染页⾯的效果了。
4、模板渲染
include_once template('wechat:wechat_threadqr');
⽤template函数就可引⽤⾃⼰的模板了,参数格式如下
discuz系统插件:模板名
模板名以.htm结束,⾥⾯可以⽤PHP代码。
5、插件安装
Discuz安装插件有2种⽅式,1种是在线安装,1种是下载代码到本地安装。
在线安装通过在后台应⽤中⼼操作,前提是你必须登录相应的账号,因为有的插件是必须付费的。
安装的过程⽆⾮就是把远程插件代码下载到本地,然后解压缩,再按照本地的安装流程操作就⾏。可以看到整个安装过程是⽐较傻⽠式的,不需要懂太多的技术。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论