结构目录

插件目录结构

  1. /plugins/test/
  2. ├─admin 插件后台控制器目录(非必须)
  3. ├─Index.php 初始化的默认控制器
  4. ├─agent 插件代理控制器目录(非必须)
  5. ├─Index.php 初始化的默认控制器
  6. ├─wx 插件微信控制器目录(非必须)
  7. ├─Index.php 初始化的默认控制器
  8. ├─model 插件模型目录(非必须)
  9. ├─sql 模块SQL文件目录(非必须)
  10. ├─install.sql 安装SQL文件
  11. ├─uninstall.sql 卸载SQL文件
  12. ├─validate 验证器目录(非必须)
  13. ├─view 插件模板目录(非必须)
  14. ├─admin 插件后台模板目录
  15. ├─index 控制器模板目录(以控制器命名)
  16. ├─index.html 模板文件(示例)
  17. ├─agent 插件前台模板目录
  18. ├─index 控制器模板目录(以控制器命名)
  19. ├─index.html 模板文件(示例)
  20. ├─wx 插件前台模板目录
  21. ├─index 控制器模板目录(以控制器命名)
  22. ├─index.html 模板文件(示例)
  23. ├─widget 插件钩子模板目录
  24. ├─system_hook.html 钩子模板(示例)
  25. ├─info.php 插件基本信息
  26. ├─menu.php 插件后台管理菜单节点
  27. ├─test.php 插件与钩子的实现方法

插件配置

插件配置位于 info.php ,例如:

<?php
// +----------------------------------------------------------------------
// | HisiPHP框架[基于ThinkPHP5.1开发]
// +----------------------------------------------------------------------
// | Copyright (c) 2016-2021 http://www.HisiPHP.com
// +----------------------------------------------------------------------
// | HisiPHP承诺基础框架永久免费开源,您可用于学习和商用,但必须保留软件版权信息。
// +----------------------------------------------------------------------
// | Author: 橘子俊 <364666827@qq.com>,开发者QQ群:50304283
// +----------------------------------------------------------------------
/**
 * 插件基本信息
 */
return [
  // 核心框架[必填]
  'framework' => 'thinkphp5.1',
  // 插件名[必填]
  'name'        => 'aaa',
  // 插件标题[必填]
  'title'       => 'aaaa',
  // 模块唯一标识[必填],格式:插件名.[应用市场ID].plugins.[应用市场分支ID]
  'identifier'  => '123',
  // 插件图标[必填]
  'icon'        => '/static/plugins/aaa/aaa.png',
  // 插件描述[选填]
  'intro' => '1111',
  // 插件作者[必填]
  'author'      => 'kangsgo',
  // 作者主页[选填]
  'author_url'  => 'http://www.baidu.com',
  // 版本[必填],格式采用三段式:主版本号.次版本号.修订版本号
  // 主版本号【位数变化:1-99】:当模块出现大更新或者很大的改动,比如整体架构发生变化。此版本号会变化。
  // 次版本号【位数变化:0-999】:当模块功能有新增或删除,此版本号会变化,如果仅仅是补充原有功能时,此版本号不变化。
  // 修订版本号【位数变化:0-999】:一般是 Bug 修复或是一些小的变动,功能上没有大的变化,修复一个严重的bug即发布一个修订版。
  'version'     => '1.0.0',
  // 原始数据库表前缀,插件带sql文件时必须配置
  'db_prefix' => 'iot_',
  //格式['sort' => '100','title' => '配置标题','name' => '配置名称','type' => '配置类型','options' => '配置选项','value' => '配置默认值', 'tips' => '配置提示'] 
  'config'    => [
    0 =>
    [
      'sort' => '100',
      'title' => '111',
      'name' => 'ddd',
      'type' => 'input',
      'options' => '',
      'value' => '',
      'tips' => '',
    ],
  ],
];

大部分内容都进行了注释,简单介绍一下插件配置

格式 [‘sort’ => ‘100’,’title’ => ‘配置标题’,’name’ => ‘配置名称’,’type’ => ‘配置类型’,’options’ => ‘配置选项’,’value’ => ‘配置默认值’, ‘tips’ => ‘配置提示’]

参数 含义 类型 必填 说明
sort 排序 int Y
title 标题 string Y 2-12个字符
name 字段名称 string Y 字母,数字,下划线
type 表单类型 string Y 目前支持 input,radio,hidden,select
options 表单选项 string N
value 默认值 string/int N
tips 提示 string N

调用插件

格式:{:config('plugins_插件名.配置名')}

插件控制器

插件控制器也可分为后台控制器(admin),代理控制器(agent)和微信控制器(wx),如果你的插件不需要用到钩子功能而又需要分前后台,还是建议你用模块的方式来开发。

1.后台控制器

需要继承 app\common\controller\Adminbase 若有模板,则需要定义 define('ENTRANCE','admin')
示例如下:

<?php
namespace plugins\aaa\admin;
use app\common\controller\Adminbase;

class Index extends Adminbase
{
    protected function initialize()
    {
        parent::initialize();
        define('ENTRANCE', 'admin');
    }
    public function index()
    {
        return $this->fetch();
    }
}

访问地址:

admin/plugins/run?_p=test&_c=index&_a=show

参数说明: _p=插件名&_c=控制器名&_a=方法名

2.代理控制器

需要继承 app\common\controller\Agentbase 若有模板,则需要定义 define('ENTRANCE','agent')
访问地址:

agent/plugins/run?_p=test&_c=index&_a=show

参数说明: _p=插件名&_c=控制器名&_a=方法名

3.微信端控制器

需要继承 app\common\controller\WXbase 若有模板,则需要定义 define('ENTRANCE','wx')
访问地址:

wx/plugins/run?_p=test&_c=index&_a=show

参数说明: _p=插件名&_c=控制器名&_a=方法名

插件模板

代理与管理端模板示例:

{extend name="admin@layout"/}
{block name="main"}
我是后台模板[F:\learn\php\xampp\htdocs\hisiphp\/plugins/aaa/view/admin/index/index.html]
{/block}

若为代理端,需要改为 agent@layout

钩子模板

物理路径:/plugins/插件名/view/widget/
示例:/plugins/插件名/view/widget/钩子方法名.html

插件钩子下个文档介绍