Prokvm中每一个应用插件都是一个独立的插件目录,所有的应用插件都是存放在项目目录中的/application/addons目录下。

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

test
├── application //此文件夹中所有文件会覆盖到根目录的/application文件夹
├── assets //此文件夹中所有文件会复制到/public/addons/test文件夹
├── controller //此文件夹为插件控制器目录
├── model //此文件夹为插件模型目录
├── public //此文件夹中所有文件会覆盖到根目录的/public文件夹
├── views //此文件夹为插件视图目录 启用插件后复制到/application/views/addons/test/文件夹
├── service //此文件夹为插件逻辑目录
├── Test.php //此文件为插件核心安装卸载控制器,必需存在(大驼峰命名)
├── LICENSE //版权文件
├── config.php //插件配置文件,我们在后台插件管理中点配置按钮时配置的文件,必需存在
├── info.ini //插件信息文件,用于保存插件基本信息,插件开启状态等,必需存在
└── install.sql //插件数据库安装文件,此文件仅在插件安装时会进行导入

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

<?php

return [
    [
        'name' => 'appid',
        'title' => '应用AppID',
        'type' => 'string',
        'content' => [],
        'value' => '',
        'rule' => 'required',
        'msg' => '',
        'tip' => '应用',
    ],
    [
        'name' => 'appkey',
        'title' => '应用AppKEY',
        'type' => 'string',
        'content' => [],
        'value' => '',
        'rule' => 'required',
        'msg' => '',
        'tip' => '',
    ],
    [
        'name' => 'voiceAppid',
        'title' => '语音短信AppID',
        'type' => 'string',
        'content' => [],
        'value' => '',
        'rule' => 'required',
        'msg' => '使用语音短信必须设置',
        'tip' => '',
    ],
    [
        'name' => 'voiceAppkey',
        'title' => '语音短信AppKEY',
        'type' => 'string',
        'content' => [],
        'value' => '',
        'rule' => 'required',
        'msg' => '使用语音短信必须设置',
        'tip' => '',
    ],
    [
        'name' => 'sign',
        'title' => '签名',
        'type' => 'string',
        'content' => [],
        'value' => '',
        'rule' => 'required',
        'msg' => '',
        'tip' => '',
    ],
    [
        'name' => 'isVoice',
        'title' => '是否使用语音短信',
        'type' => 'radio',
        'content' => [
            '否',
            '是',
        ],
        'value' => '0',
        'rule' => 'required',
        'msg' => '',
        'tip' => '',
    ],
    [
        'name' => 'isTemplateSender',
        'title' => '是否使用短信模板发送',
        'type' => 'text',
        'content' => [],
        'value' => '1',
        'rule' => 'required',
        'msg' => '',
        'tip' => '',
    ],
    [
        'name' => 'sender',
        'title' => '是否使用短信模板发送',
        'type' => 'select',
        'content' => [
            '0'=>'否',
            '1'=>'是',
        ],
        'value' => '0',
        'rule' => 'required',
        'msg' => '',
        'tip' => '',
    ],
    [
        'name' => 'sendersss',
        'title' => '模板发送',
        'type' => 'checkbox',
        'content' => [
            '否',
            '是',
            'YEES',
        ],
        'value' => [
            '1',
            '2',
        ],
        'rule' => 'required',
        'msg' => '',
        'tip' => '',
    ],
    [
        'name' => 'template',
        'title' => '短信模板',
        'type' => 'array',
        'content' => [],
        'value' => [
            'register' => '1',
            'resetpwd' => '2',
            'changepwd' => '3',
            'profile' => '4',
        ],
        'rule' => 'required',
        'msg' => '',
        'tip' => '',
    ]
];

config.php中的值在Prokvm任何地方均可使用get_addon_config(‘appid’,’test’)来获取配置值
info.ini这个文件仅用于保存插件基础信息和开启状态,此文件的内容格式为
type 配置项类型支持 string/radio/text/select/checkbox/array

name = test
title = 测试
intro = 测试插件
author = 官方
website = https://www.xmbillion.net
version = 1.0.0
state = 0
rely = domain|域名销售模块,alipaylogin|支付宝登陆

注意这个name是插件的唯一标识,不能和现在的插件冲突,其次注意下这个name值,如果我们有涉及到数据库,那个表的前缀也必须是PREFIX_标识名开头。比如我们下面的PREFIXblog_category。 rely为插件依赖 无依赖时可以不需写入此配置多个以,隔开 格式(插件标识|插件名称)

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

CREATE TABLE if not exists `__PREFIX__test_settings`
(
    `id`          int(10) unsigned NOT NULL AUTO_INCREMENT,
    `title`       varchar(255)     NOT NULL COMMENT '活动标题',
    `subtitle`    varchar(255)              DEFAULT NULL COMMENT '副标题',
    `images`      varchar(1000)             DEFAULT NULL COMMENT '活动海报',
    `content`     text COMMENT '活动描述',
    `vote_nums`   int(11)          NOT NULL DEFAULT '1' COMMENT '可投票数',
    `day_repeat`  enum ('0','1')            DEFAULT NULL COMMENT '每天投票:1=开启,0=关闭',
    `ip_check`    enum ('0','1')            DEFAULT NULL COMMENT 'IP检查:1=开启,0=关闭',
    `start_time`  int(11)                   DEFAULT NULL COMMENT '开始时间',
    `end_time`    int(11)                   DEFAULT NULL COMMENT '结束时间',
    `share_title` varchar(250)              DEFAULT NULL COMMENT '分享主题',
    `share_image` varchar(250)              DEFAULT NULL COMMENT '分享缩略图',
    `status`      enum ('0','1')            DEFAULT NULL COMMENT '选项状态:1=正常,0=禁止',
    PRIMARY KEY (`id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='投票设置';


--
-- Table structure for table `__PREFIX__test_options`
--
CREATE TABLE if not exists `__PREFIX__test_options`
(
    `id`          int(10) unsigned NOT NULL AUTO_INCREMENT,
    `name`        varchar(255)     NOT NULL COMMENT '选项名称',
    `vote_id`     int(11)          NOT NULL COMMENT '所属活动',
    `description` varchar(255)   DEFAULT NULL COMMENT '选项说明',
    `code`        int(10) unsigned NOT NULL COMMENT '选项编号',
    `weigh`       int(11)        DEFAULT '0' COMMENT '排序',
    `image`       varchar(255)   DEFAULT NULL COMMENT '选项图片',
    `votes`       int(11)        DEFAULT '0' COMMENT '已获票数',
    `status`      enum ('0','1') DEFAULT '0' COMMENT '选项状态:1=正常,0=禁止',
    PRIMARY KEY (`id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='投票项';


--
-- Table structure for table `__PREFIX__test_logs`
--

CREATE TABLE if not exists `__PREFIX__test_logs`
(
    `id`         int(10) unsigned NOT NULL AUTO_INCREMENT,
    `user_id`    int(10) unsigned NOT NULL COMMENT '投票用户',
    `vote_id`    int(11)          NOT NULL COMMENT '所属活动',
    `option_id`  int(10) unsigned NOT NULL COMMENT '投票项',
    `vote_date`  int(10) unsigned NOT NULL COMMENT '投票日期',
    `ip_address` varchar(20)      DEFAULT NULL COMMENT 'ip地址',
    `createtime` int(10) unsigned DEFAULT NULL COMMENT '投票时间',
    PRIMARY KEY (`id`),
    KEY `user_id` (`user_id`),
    KEY `vote_id` (`vote_id`),
    KEY `option_id` (`option_id`),
    KEY `vote_date` (`vote_date`),
    KEY `ip_address` (`ip_address`),
    KEY `user_id_2` (`user_id`, `vote_date`),
    KEY `user_id_3` (`user_id`, `option_id`, `vote_date`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='投票记录';

外部文件需要使用插件server时可以使用
$this->load->service(“ADDON_geetest/geetest_service”); 引用
ADDON_表示插件目录
geetest表示插件名称
外部文件需要使用插件model时可以使用
$this->load->add_addon_package(‘domain’)->model(‘domain_model’);
add_addon_package 中为插件名称

文档更新时间: 2022-12-03 11:09   作者:carlos