懒人导航 插件开发 教程 (来试试创建自己的插件吧)

2026-09-09 · 28 阅读

懒人导航 插件开发 教程 (来试试创建自己的插件吧)

教程 懒人导航 应用中心 插件开发

​插件开发在线文档:​https://site.ikunwl.com/data/docs/#ch4

1 插件目录结构

插件放在 plugins/{插件名}/ 目录下,目录名即插件名(小写字母/数字/连字符)。一个完整插件可包含以下文件:

plugins/myplugin/
plugin.json 元数据声明(必需)
include.php 主文件:类/函数定义 + 钩子注册(可选,由 plugin.json 的 main_file 指定)
main.php 后台设置面板:注册设置 Tab 钩子(可选,由 config_file 指定)
schema.php 数据库声明:表、字段、默认配置(可选,固定文件名)
api.php 开放 API 接口声明(可选):需在 plugin.json 声明 api_file 才会被加载,启用后自动注册 /api/open/* 接口并出现在后台「API 密钥」文档(见 4.2 与 data/docs/api-guide.md)
admin.php 独立后台管理页面(可选;插件目录存在该文件时后台自动显示「管理」按钮)
settings.php 插件内部自用页面/片段(可选,按需命名,如 article/spider 插件)
css/ 插件样式(可选,Plugin::asset() 引用)
js/ 插件脚本(可选)

加载机制

  • ​​​include.php​:仅在插件启用时由 Plugin::init()(core/bootstrap.php 调用)加载,用于定义类/函数并注册前台与后台钩子
  • ​​​main.php​:仅在插件启用时随 include.php 一起加载,用于注册设置 Tab 钩子(admin_settings_nav + admin_settings_tabs
  • ​​​schema.php​:仅在插件启动(ensureSchema)与卸载(uninstall)时由 Plugin::loadSchema() 加载,返回声明数组
  • ​​​api.php​:由 core/OpenApi.php 按需加载。插件启用后,其中声明的接口自动注册到 /api/open/*(需 API Key),并自动出现在后台「API 密钥」使用说明;停用后接口失效(返回 403 / 40301)。声明格式与内置参考见 data/docs/plugin-dev.mdplugins/article/api.php
  • ​​​admin.php​:通过 /admin/plugin.php?p=插件名 访问。分发器会先校验插件已启用并输出后台公共头尾;由于引导阶段已执行 Plugin::init(),​​​include.php 中定义的类/函数可直接使用​,无需手动 include
  • ​​​未启用的插件完全不加载​,不注册任何钩子、不执行任何代码;其 admin.php 也无法访问

所有 PHP 文件开头建议加安全检查,阻止被直接 URL 访问(各内置插件统一写法):

?php
if (!defined('APP_VERSION') || !class_exists('Database')) {
    die('Forbidden');
}

`

2 plugin.json 配置

每个插件根目录必须有 plugin.json,由 Plugin::getInfo() 读取并与默认值合并:

{
    "name": "myplugin",
    "title": "我的插件",
    "version": "1.0",
    "author": "你的名字",
    "description": "插件功能描述",
    "main_file": "include.php",
    "config_file": "main.php",
    "config_tab": "myplugin",
    "schema_file": "schema.php",
    "hooks": ["sidebar_top", "after_footer"],
    "tables": ["mytable"],
    "builtin": true
}
字段 必填 说明
name 插件目录名(必须与文件夹一致),用于启用状态键 plugin_{name}_enabled 与配置前缀
title 显示名称(默认取目录名)
version 版本号(默认 1.0)
author 作者
description 功能描述(后台插件列表展示)
main_file 主文件名(默认 {name}.php,内置插件统一设为 include.php
config_file 后台设置面板文件名(如 main.php);无设置项则不填
api_file 开放 API 声明文件名(如 api.php)。​必须显式声明​,core/OpenApi.php 才会加载它以注册 open/* 接口;未声明一律不加载——防止把"请求处理器"型文件(如 appcenter 的 api.php)误当作声明文件 include
config_tab 设置 Tab 的 ID(默认等于插件名);当 Tab ID 与插件名不同时需指定,后台「设置」按钮据此跳转(admin/plugins.php)
schema_file 信息性字段——系统实际固定读取 schema.php,无需配置
hooks 声明使用的钩子列表(后台插件列表展示,不影响实际注册——注册靠 include.php/main.php 中的 Plugin::registerHook()
tables 声明创建的表名列表(卸载共享表判断的补充来源)
builtin 是否为内置插件(默认 true,后台列表显示「内置」标签)

注意:插件启用状态不写在 plugin.json 中,而是由系统管理在 settings 表(plugin_{name}_enabled,安装时写入 0)。

其他详见插件开发文档~偷偷说一句,可以把文档丢给 AI,就可以写插件了哦,文档很完善了,期待你的插件,做好插件可以在:> 茶馆 < 分享插件,也可以在:> 反馈 < 反馈你所遇到的问题。

返回文章列表
分享: