当前位置: 首页 > 后端技术 > PHP

插件系统分析及Discuz插件实现

时间:2023-03-30 02:04:13 PHP

一、Discuz介绍Discuz是国内比较知名的开源论坛,后来被腾讯收购。Discuz在设计的时候就考虑了生态的构建,支持插件化设计,让开发者朋友们一起来共建生态。不得不说设计师很有商业头脑。回到正题,我们为什么要学习Discuz的插件设计,因为如果哪天我们要自己搭建一个系统,也需要支持插件,可以借鉴相关的设计。源码:https://gitee.com/ComsenzDisc...插件市场:https://addon.dismall.com/如何安装这里就不多说了,大家可以参考官方的说明网站。2、插件系统的需求和场景在分析Discuz的插件设计之前,我们还需要大致分析一下,如果设计一个支持插件的系统,系统应该支持哪些功能。1、安装与卸载插件安装的过程可能是在Mysql中添加一些表,将插件的代码覆盖放到系统可以调用的地方;反安装是反的,如何把插件从系统中删除干净。2、插件的启用和禁用不用多说,有些插件可能有BUG,或者和其他插件冲突,需要暂时禁用,修复问题后再启用。3、插件的加载顺序因为插件之间可能存在加载顺序,或者一个插件依赖另一个插件,所以需要设置插件的加载顺序。这应该算是比较少用的场景了。4.插件的自我描述提供插件的名称等信息来描述自己。5.您可以在某个地方以可视化的方式设置插件的参数。插件一般都比较通用,还有一些自定义的参数配置。这些插件需要在一个地方设置。6、能够将自己的接口注入到系统中插件可能会提供一些接口,可以被前台调用,也就是可以在浏览器中访问。7.模板渲染能力插件必须能够渲染自己的页面,可以直接生成页面供前端用户访问。8、傻瓜式安装因为使用网站的人不一定懂代码,尽量做到简单傻瓜式安装,不要有太多的安装和运维成本。9、完善的扩展点一个设计良好的插件应该提供很多的扩展点,使插件能够在系统原有的进程上扩展一些能力。比如支付方式,一个插件可以提供微信,另一个插件可以提供支付宝。发帖后,系统应该有机制让插件捕捉到这个事件,以便做一些操作,比如增加用户活跃度,增加积分。更加灵活,甚至提供一种机制来替换系统的默认实现。3、Discuz插件机制实现分析Discuz插件放在upload/source/plugin目录下,我们将一一分析其实现机制。下面是其中一个插件的代码目录截图:1.安装和卸载在插件的根目录下提供install.php和uninstall.php,在安装和卸载系统时调用相应的文件。2、插件配置主要以xml形式提供。xml可以描述插件。关键参数是identifier,是插件的唯一标识,不能重复。并提供配置参数的能力,所有符合相应规范的,Discuz会自动加载相应的参数,并提供保存参数和获取参数的能力。3.接口注入和页面访问https://www.xxx.com/plugin.ph...:sign&operation=qiandao&infloat=1&inajax=1以上是微信访问插件中的sign模块,模块以.结尾。inc.php,也就是在插件中找到sign.inc.php,然后把请求转到这个文件中处理。至于如何在代码中引入其他文件,系统的根目录是通过DISCUZ_ROOT引用的,插件的目录也是确定的,所以只要加上插件本身的目录就可以引用了。require_onceDISCUZ_ROOT。'./source/plugin/wechat/wsq.class.php';渲染页面也是一样,按照上面的格式访问,把插件和模块传给plugin.php,然后在对应的模块输出页面,就可以实现渲染页面效果。4、模板渲染include_oncetemplate('wechat:wechat_threadqr');可以使用模板函数引用自己的模板,参数格式如下插件:模板名模板名以.htm结尾,里面可以使用PHP代码。5、插件安装Discuz中安装插件有两种方式,一种是在线安装,另一种是下载代码本地安装。在线安装是在后台应用中心操作的,前提是必须登录对应的账号,因为有些插件是要付费的。安装过程无非就是将远程插件代码下载到本地,然后解压,然后按照本地的安装过程。可以看到整个安装过程比较傻瓜化,不需要懂太多技术。RabbitMQ跨机房迁移零数据丢失故障演练工具ChaosBlade简介