开发标准
插件不得篡改、替换、cms系统文件,只允许在不影响原有功能的情况添加配置参数,如【后台菜单配置、播放组配置】。如果每个开发者都不遵守该规则,那么应用市场面临各种相互不兼容问题,严重的还会影响cms本身功能以及安全问题,请广大开发者们务必遵守。
创建插件
创建的插件可以在view
视图中使用,也可以在php
业务中使用 安装完成后访问系统时会在项目根目录生成名为addons的目录,在该目录中创建需要的插件。 下面写一个例子:
- 创建
mydemo
插件 - 在
addons
目录中创建mydemo
目录 - 创建钩子实现类
- 在
mydemo
目录中创建Mydemo.php
类文件。注意:类文件首字母需大写
<?php namespace addons\mydemo; // 注意命名空间规范 use thinkAddons; /** * 插件测试 * @author byron sampson */ class Mydemo extends Addons // 需继承thinkaddonsAddons类 { // 该插件的基础信息 public $info = [ 'name' => 'mydemo', // 插件标识 'title' => '插件测试', // 插件名称 'description' => 'thinkph5插件测试', // 插件简介 'status' => 0, // 状态 'author' => 'byron sampson', 'version' => '0.1' ]; /** * 插件安装方法 * @return bool */ public function install() { return true; } /** * 插件卸载方法 * @return bool */ public function uninstall() { return true; } /** * 实现的mydemohook钩子方法 * @return mixed */ public function mydemohook($param) { // 调用钩子时候的参数信息 print_r($param); // 当前插件的配置信息,配置信息存在当前目录的config.php文件中,见下方 print_r($this->getConfig()); // 可以返回模板,模板文件默认读取的为插件目录中的文件。模板名不能为空! return $this->fetch('info'); } }
创建插件配置文件
在mydemo
目录中创建config.php
类文件,插件配置文件可以自定义一些参数,然后在程序任何位置使用get_addon_config(mydemo)
来获取定义的参数,后台打开配置视图
为插件按钮的配置
入口。
完整的config.php
示例
<?php return array ( 0 => array ( 'name' => 'rewrite', # 伪静态,在苹果cms开启路由模式后可在rewrite数组下的 value 添加路由规则 'title' => '伪静态', 'type' => 'array', # 数组类型 'content' => array (), 'value' => array ( 'index' => '/mydemo$', 'api/index' => '/api$' ), 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ), 1 => array ( 'name' => 'open', 'title' => '多选框', 'type' => 'radio', # radio 多选框类型 'content' => array ( 'on' => '启用', 'off' => '关闭', ), 'value' => 'off', 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ), 2 => array ( 'name' => 'open', 'title' => '复选框', 'type' => 'checkbox', # 复选框 类型 'content' => array ( 'on' => '启用', 'off' => '关闭', ), 'value' => 'off', 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ), 3 => array ( 'name' => 'menu', 'title' => '输入框', 'type' => 'string', # 字符串 输入框类型 'content' => array (), 'value' => '1,2,3,4', 'rule' => 'required', 'msg' => '', 'tip' => '备注文字', 'ok' => '', 'extend' => '', #string 类型支持 extend参数,如:style="line-height: 1.8;" ), 4 => array ( 'name' => 'hot_banner', 'title' => '下拉菜单', 'type' => 'selects', # 下拉菜单类型 'content' => array ( 0 => '小图风格', 1 => '巨幕风格', ), 'value' => '1', 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ), 5 => array ( 'name' => 'tiptext', 'title' => '文本框', 'type' => 'text', # textarea 文本框类型 'content' => array (), 'value' => '大家好我是老王,建站就用苹果cms', 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => 'style="height: 150px;"', # text 类型支持 extend参数,如:style="line-height: 1.8;" ), 6 => array ( 'name' => 'go_time', 'title' => '日期选择', 'type' => 'datetime', # 日期选择器 类型 'content' => array (), 'value' => '1629560562', 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ), 7 => array ( 'name' => 'go_pic', 'title' => '上传图片', 'type' => 'images', # 上传图片表单类型 'content' => array (), 'value' => '', 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ), 8 => array ( 'name' => 'go_file', 'title' => '上传文件', 'type' => 'files', # 上传文件表单类型 'content' => array (), 'value' => '', 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ), 9 => array ( 'name' => 'go_bool', 'title' => '双选表单', 'type' => 'bool', # 双选表单类型 'content' => array (), 'value' => '', 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ), );
创建钩子模板文件
在mydemo
目录中创建info.html
模板文件,钩子在使用fetch
方法时对应的模板文件。
<h1>hello tpl</h1>
如果插件中需要有链接或提交数据的业务,可以在插件中创建controller业务文件,
要访问插件中的controller时使用addon_url生成url链接。
如下:
<a href="{:addon_url('mydemo://Action/link')}">link mydemo</a>
格式为:
mydemo
为插件名,Action
为controller
中的类名,link
为controller
中的方法- 创建插件的
controller
文件 - 在
mydemo
目录中创建controller
目录,在controller
目录中创建Action.php
文件controller
类的用法与tp5
中的controller
一致
<?php namespace addons\mydemo\Controller; class Action { public function link() { echo 'hello link'; } }
如果需要使用view模板则需要继承thinkaddonsController类 模板文件所在位置为插件目录的view中,规则与模块中的view规则一致
<?php namespace addons\mydemo\Controller; use think\addons\Controller; class Action extends Controller { public function link() { return $this->fetch(); } }
使用钩子
创建好插件后就可以在正常业务中使用该插件中的钩子了 使用钩子的时候第二个参数可以省略
模板中使用钩子
<div>{:hook('mydemohook', ['id'=>1])}</div>
php业务中使用只要是thinkphp5正常流程中的任意位置均可以使用
hook('mydemohook', ['id'=>1])
最终生成的目录结构为
maccms └─ addons │ └─mydemo │ └─controller │ │ └─Action.php │ │─view │ │ └─action │ │ └─link.html | │─config.php | │─info.ini | │─Mydemo.php │─application │─thinkphp │─extend │─vendor