- 🏠 简介
- 🔌 api接口
-
🔧 插件开发
- 介绍
- 插件优势
- 新建插件
- 技术栈
- 插件开发规范
- 插件目录结构
- model 层开发
- service 层开发
- api 接口开发
- menu 菜单开发
-
event 事件钩子开发
- 开发指南
- 常用事件
- SiteInit 站点初始化事件
- AddSiteAfter 站点创建后事件
- MemberRegister 会员注册后事件
- MemberLogin 会员登录后事件
- PayCreate 支付创建事件
- PaySuccess 支付成功事件
- RefundSuccess 退款成功事件
- TransferSuccess 转账成功事件
- BottomNavigation 底部导航事件
- NoticeData 消息模板数据内容事件
- GetQrcodeOfChannel 创建二维码事件
- ExportDataType 导出数据类型事件
- ExportData 导出数据源事件
- GetPosterType 海报类型事件
- GetPosterData 海报数据事件
- ShowCustomer 应用管理加载事件
- GetWechatTransferTradeScene 微信支付转账场景事件
- ThemeColor 主题风格事件
- initWap 手机端初始化加载事件
- dict 数据字典开发
- layout 自定义布局开发
- job 消息队列和计划任务开发
- notice 消息发送开发
- printer 小票打印模板开发
- export 数据导出开发
- diy 自定义组件/页面装修开发
- diy 自定义表单组件开发
- poster 自定义海报开发
- icon 引入图标
- 支付方式开发
- upgrade 插件版本升级
- 打包插件
- 授权信息变更回调通知
- 官网上架
- 📝 二次开发须知
- 👨💻 二次开发指导
-
🎬 二次开发应用插件视频教程
- 二次开发安装视频教程
- 准备工作与创建插件
- 插件目录整体说明
- 插件admin目录
- 插件app目录说明(adminapi、api、验证器)
- 插件app目录(dict、job)
- 插件app目录说明(lang、listener)
- 插件app目录说明(model、service)
- 插件uniapp目录说明
- 插件开发之后台功能开发(代码生成器)
- 插件开发之uniapp功能开发(api)第一节
- 插件开发之uniapp功能开发(api)第二节
- 插件开发之uniapp功能开发(api)第三节
- 插件安装与打包原理
- 消息队列开发
- 计划任务开发
- DIY组件和自定义页面装修开发
- 支付接口开发
- 插件升级包打包流程以及云编译功能
插件目录结构
以hello_world插件为例,详细介绍插件的标准目录结构及其功能说明,为插件开发者提供参考指南。
插件目录结构
每个插件都有一个以插件标识命名的根目录,如hello_world。插件根目录包含以下主要文件和子目录:
├─niucloud/ # niucloud-admin框架目录
│ ├─addon/ # 插件目录
│ │ ├─hello_world/ # hello World插件
│ │ │ ├─admin/ # 管理端前端目录
│ │ │ │ ├──api/ # 管理端API接口定义
│ │ │ │ ├──assets/ # 静态资源文件
│ │ │ │ ├──lang/ # 前端语言包
│ │ │ │ ├──layout/ # 布局组件
│ │ │ │ └──views/ # 页面视图
│ │ │ ├─app/ # 后端业务代码
│ │ │ │ ├──adminapi/ # 管理端API
│ │ │ │ │ ├──controller/ # 控制器层,处理管理端请求
│ │ │ │ │ └──route/ # 路由配置,定义管理端API路由
│ │ │ │ ├──api/ # 前端API(移动端/web端共用)
│ │ │ │ │ ├──controller/ # 控制器层,处理前端请求
│ │ │ │ │ └──route/ # 路由配置,定义前端API路由
│ │ │ │ ├──dict/ # 字典定义
│ │ │ │ ├──job/ # 定时任务
│ │ │ │ ├──lang/ # 后端语言包
│ │ │ │ ├──listener/ # 事件监听器
│ │ │ │ ├──model/ # 数据模型
│ │ │ │ ├──service/ # 业务服务层
│ │ │ │ │ ├──admin/ # 管理端服务
│ │ │ │ │ ├──api/ # 前端服务
│ │ │ │ │ └──core/ # 核心服务
│ │ │ │ ├──upgrade/ # 升级脚本
│ │ │ │ ├──validate/ # 验证规则
│ │ │ │ └──event.php # 事件定义
│ │ │ ├─compile/ # 编译目录
│ │ │ │ ├──admin/ # 管理端编译目录
│ │ │ │ ├──aliapp/ # 移动端编译目录
│ │ │ │ ├──wap/ # 移动端编译目录
│ │ │ │ ├──weapp/ # 小程序编译目录
│ │ │ │ └──web/ # web端编译目录
│ │ │ ├─package/ # 依赖包,系统安装时会自动安装依赖包
│ │ │ │ ├──admin-package.json # admin端口的依赖包
│ │ │ │ ├──composer.json # 主应用依赖包
│ │ │ │ ├──uni-app-package.json # uni-app端依赖包
│ │ │ │ ├──uni-app-pages.php # uni-app端口页面文件
│ │ │ │ └──web-package.json # web前端依赖包
│ │ │ ├─resource/ # 插件资源文件
│ │ │ ├─sql/ # 插件的sql文件夹
│ │ │ │ ├─install.sql # 插件安装时会自动调用执行
│ │ │ │ ├─unInstall.sql # 插件卸载时会自动调用执行
│ │ │ ├─uni-app/ # 移动端前端目录
│ │ │ │ ├──api/ # 移动端API接口定义
│ │ │ │ ├──components/ # 公共组件
│ │ │ │ ├──hooks/ # 钩子组件
│ │ │ │ ├──locale/ # 语言包
│ │ │ │ ├──pages/ # 页面视图
│ │ │ │ ├──static/ # 静态资源
│ │ │ │ ├──stores/ # 状态管理
│ │ │ │ ├──styles/ # 样式表
│ │ │ │ └──utils/ # 工具函数
│ │ │ ├─web/ # web前端目录
│ │ │ │ ├──api/ # web端API接口定义
│ │ │ │ ├──assets/ # 静态资源文件
│ │ │ │ ├──lang/ # 语言包
│ │ │ │ └──pages/ # 页面视图
│ │ │ ├─Addon.php # 插件主安装、卸载、更新时自动调用相关函数
│ │ │ ├─info.json # 插件的配置文件
│ │ ├─shop/ # shop插件
│ │ ├─... # 其他插件
│ ├─app/ # 主应用目录
核心文件说明
Addon.php 插件程序
Addon.php是每个插件必须包含的核心文件,用于管理插件的生命周期,包括安装、卸载和升级操作。每个插件都需要自己实现install, unstall, upgrade 方法。
class Addon
{
/**
* 插件安装执行
*/
public function install()
{
return true;
}
/**
* 插件卸载执行
*/
public function uninstall()
{
return true;
}
/**
* 插件升级执行
*/
public function upgrade()
{
return true;
}
}
app.php 路由端口
框架已经定义了各端口的访问路由,端口定义等,如果有需求,可以根据自身业务,进行调整
如需了解核心原理,开发者可以自行阅读
文件位置:niucloud/route/app.php
info.json 插件的配置文件
info.json包含插件的基本配置信息,系统通过此文件识别和管理插件。
插件配置文件位置:niucloud/addon/hello_world/info.json
{
"title": "hello world", // 插件名称
"desc": "Niucloud hello world演示插件",// 插件描述
"key": "hello_world",// 插件标识key
"version": "1.0.0",// 插件当前版本
"author": "niucloud",// 开发者名称
"type": "app",// 插件类型,app:应用,addon:插件
"support_app": "",// 插件所支持的应用,为空表示通用插件
"compile":[],//插件编译时需要包含的文件,默认值为空数组
"support_version": "1.1.7"// 插件所支持的框架版本号
}
install.sql
CREATE TABLE IF NOT EXISTS `{{prefix}}hello_world` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='演示插件表';
INSERT INTO `{{prefix}}hello_world`(`id`, `name`) VALUES (1, '名称');
unInstall.sql
DROP TABLE IF EXISTS `{{prefix}}hello_world`;
注意
开发者在进行插件二开时,应严格遵循上述目录结构,以确保开发的插件能够正常运行并提供良好的用户体验。本文档以hello_world插件为例编写,不同插件可能会有细微差异,但基本框架一致。