很多的系统一开始只能提供基础的主干部分功能,对于后续的迭代和更新如果非主干又个性的功能,建议采用插件的系统进行开发,这样方便随时启用或者停用不同的插件功能。

今天我们主要讲讲PHP开发插件机制的设计与开发,用一个市场上大家能下载的开源的商城系统为例。大家可以先点击 下载 

这个系统的插件机制最主要的函数库是WSTMart/vendor下的函数库,一些风格位置和函数的使用都在里边去定义,这一部分用户可以根据实际情况去进行扩展。下边我们物流插件(快递100)为例子讲解如何进行插件开发:

1.准备开发目录,如下:

https://www.wstmart.net/static/uploads/kindeditor/image/20170729/20170729112426_42698.png

1)controller--插件控制器目录

2)model---插件控模型目录

3)view---插件视图文件目录

4)config.php---插件配置目录,这里的配置会影响到管理后台“扩展管理-插件管理”里的插件描述,例如:

https://www.wstmart.net/static/uploads/kindeditor/image/20170729/20170729112700_11192.png

其中type类型有hidden(隐藏域)、text(输入框)、radio(单选框)、textarea(文本域)、tips(提示信息)、checkbox(复选框)-需搭配options使用、group(分页Tab)-需搭配options几种类型。开发者在这里定义了不同的type.在插件设置界面就会生成不同的元素。

5)Kuaidi.php---插件主入口,凡是在插件里用到的钩子,都需要在该文件中定义。例如该插件会在钩子adminDocumentOrderView处执行,那么就需要在该文件内定义这个钩子的函数:

https://www.wstmart.net/static/uploads/kindeditor/image/20170729/20170729113314_53165.png

作为一个插件主入口必须的函数有install(插件安装时执行)、uninstall(插件卸载时执行)、enable(插件启用时执行)、disable(插件禁用时执行)、saveConfig(保存插件设置时执行),这些是必须的函数。当用户在扩展管理中安装、卸载,启用,禁用和保存插件设置时就需要调用这里的函数。

6)install.sql---安装插件时需要执行的sql。

7)uninstall.sql---卸载插件时需要执行的sql。

 

2.在插件主入口创建插件必备的函数install(插件安装时执行)、uninstall(插件卸载时执行)、enable(插件启用时执行)、disable(插件禁用时执行)、saveConfig(保存插件设置时执行)以及钩子需要执行的函数。

3.在model中定义插件的业务处理函数,如图:

https://www.wstmart.net/static/uploads/kindeditor/image/20170729/20170729113848_81872.png
 

其中install和uninstall是必须的插件业务处理动作。一个插件会监听那些钩子,就需要在install里进行定义,如图$hooks中数组中的内容“adminDocumentOrderView”,表示钩子“adminDocumentOrderView”会被该快递插件监听。当用户安装插件之后,我们就在“拓展管理-扩展管理-钩子管理”中查看到改钩子的监听插件情况:

https://www.wstmart.net/static/uploads/kindeditor/image/20170729/20170729114144_52228.png

当用户卸载了插件之后,此处也会看到这个插件名称。

4.插件请求。如果和钩子监听无关的跳转或者请求,则用户可以像一般的做法一样,在controller里定义控制器,然后调用model进行处理,最后返回到view里的视图去显示。

5.视图参数定义。有时候我们需要在插件里引用到外部的布局,例如引用商品相应页的布局,那么我们就需要插件系统帮我们预定义一套参数,这样方便我们引用。注意:系统之所以要预定义一套参数,主要是为了前台风格切换的时候不至于因为插件里写死了风格路径导致页面错位。具体的参数定义开发者可以参考文件vendor/5ini99/think-addons/src/Controller.php中的initLayout函数,也可以自行对此文件进行修改-不过为了兼容后续的升级,最好开发者反馈给官方进行修改。有了官方的地方,开发者就可以在前台类似这样的引用了:

https://www.wstmart.net/static/uploads/kindeditor/image/20170729/20170729114917_26806.png

这样就完成了PHP对插件这一块的简单的开发,如果大家有更好的方法,欢迎留言或者私信聊聊。

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐