目录结构

插件目录

SwiftAdmin中的每一个插件,都是一个独立的文件夹,所有的应用插件都存在于根目录下的plugin文件夹下。

以下是一个演示插件的目录结构:

demo
├── app             // 此文件夹中所有文件会覆盖到根目录的/app文件夹
├── public          // 此文件夹中所有文件会覆盖到根目录的/public文件夹
├── Demo.php        // 此文件为插件核心安装卸载控制器,必需存在
├── config.json      // 插件配置文件,我们在后台插件管理中点配置按钮时配置的文件,必需存在
├── config.html     // 插件配置模板,如不存在则无配置项
├── function.php    // 全局的插件函数文件
├── Upgrade.php     // 插件升级文件
├── install.sql     // 插件数据库安装文件,此文件仅在插件安装时会进行导入
├── uninstall.sql    // 插件数据库卸载文件
├── LICENSE         // 版权文件

其中apppublic文件夹会覆盖到根目录,这两个文件夹主要用于我们后台管理功能的开发,我们可以先在后台开发好对应的管理功能后,

再将对应的功能打包进插件即可,在插件安装和卸载时会自动进行文件冲突检测,如果遇到冲突的文件会提醒用户是否进行覆盖或删除。

Demo.php这个文件是插件的核心文件,我们可以在这个文件中编写插件安装或卸载时执行的脚本,或者在此插件中编写菜单的生成或删除,

同时插件的行为方法也是编写在此文件中的,插件所支持的行为事件会在后面讲到。此文件命令规则为插件目录名称首字母大写。

config.html 这个文件是插件配置的模板文件,我们在后台插件管理中点 配置 按钮时会调用该模板文件进行渲染,如果不存在该模板文件,将调用框架自带的配置模板进行渲染。

config.json 这个文件是插件的配置文件,我们在后台插件管理中点 配置 按钮时会保存在此文件,此文件的内容格式为:

配置文件

{
    "name": "demo",
    "title": "测试插件",
    "intro": "这是一个测试插件!",
    "author": "官方",
    "home": "https:\/\/www.swiftadmin.net",
    "version": "1.0.1",
    "status": 1,
    "extends": {
        "title": "这里是扩展配置信"
    },
    "rewrite": {
        "\/demo1": "demo\/demo", // 如需要伪静态,请将控制器大小写填写正确
        "\/demo2": "index\/list",
        "\/demo3": "index\/query"
    },
    "area": [
        "600px",
        "650px"
    ],
    "auto": true,
    "config": 1,
}

插件菜单


$menu = [
    [
        'title'    => '测试插件',
        'router'   => '/command/index', // 如果你当前菜单下存在子菜单,那么请将路由设置为# 
                                        // 请参考控制台 数据库表
        'icons'    => 'layui-icon-app',
        'auth'    => '1', // 是否鉴权
        'children' => [
            ['router' => '/command/index', 'title' => '查看'],
            ['router' => '/command/add', 'title' => '添加'],
            ['router' => '/command/detail', 'title' => '详情'],
            ['router' => '/command/execute', 'title' => '运行'],
            ['router' => '/command/del', 'title' => '删除'],
            ['router' => '/command/multi', 'title' => '批量更新'],
        ]
    ]
];

// 二级菜单设置
    [
        'title'    => '测试插件2',
        'router'   => '#',
        'icons'    => 'layui-icon-app',
        'auth'    => '1', 
        'children' => [
            [
                'router' => '/fenlei1/index', 
                'title' => '分类1',
                'children'=> [
                    ['router' => '/fenlei1/add', 'title' => '添加'],
                    ['router' => '/fenlei1/detail', 'title' => '详情'],
                    ['router' => '/fenlei1/execute', 'title' => '运行'],
                    ['router' => '/fenlei1/del', 'title' => '删除'],
                    ['router' => '/fenlei1/multi', 'title' => '批量更新'],
                ],
            ],
            [
                'router' => '/fenlei2/index', 
                'title' => '分类2',
                'children'=> [
                    ['router' => '/fenlei2/add', 'title' => '添加'],
                    ['router' => '/fenlei2/detail', 'title' => '详情'],
                    ['router' => '/fenlei2/execute', 'title' => '运行'],
                    ['router' => '/fenlei2/del', 'title' => '删除'],
                    ['router' => '/fenlei2/multi', 'title' => '批量更新'],
                ],
            ],                   
        ]
    ],

前台菜单

前台菜单请自行编写menu.html文件,将他放在插件目录->data文件夹下,内容格式为:

<li class="layui-nav-item">
   <a class="#" lay-href="/demo/index">演示插件</a>
</li>

这时候访问前台用户中心,可以看到一个演示插件的菜单,可以编写前台的交互页面!!

插件服务

插件服务需要自行进行注册,你可以在插件根目录建立service.php,并在自己插件的启用和关闭的时候,
修改vendor目录下的service.php文件进行自动加载!服务文件的编写规则请参考thinkphp官方代码!

数据库表

install.sql 这个文件中只能是SQL语句,同时在此文件中可以使用 __PREFIX__ 表示数据库表前缀,插件在安装导入SQL时自动进行替换。此文件的内容格式为

uninstall.sql 数据库文件,在卸载插件的时候会用到,如果不存在这个SQL文件,则在卸载的时候将不会清理掉数据库

/*
 Navicat Premium Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 50726
 Source Host           : localhost:3306
 Source Schema         : swiftadmin

 Target Server Type    : MySQL
 Target Server Version : 50726
 File Encoding         : 65001

 Date: 23/03/2021 20:44:01
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for __PREFIX__demo
-- ----------------------------
DROP TABLE IF EXISTS `__PREFIX__demo`;
CREATE TABLE `__PREFIX__demo`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '标题',
  `update_time` int(11) NULL DEFAULT NULL COMMENT '更新时间',
  `create_time` int(11) NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'demo插件数据表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of __PREFIX__demo
-- ----------------------------
INSERT INTO `__PREFIX__demo` VALUES (1, 'demo插件', 1602812266, 1602812266);

SET FOREIGN_KEY_CHECKS = 1;
最后更新时间:2022-08-21 18:32:05977
https://doc.swiftadmin.net/help/22.html