ForumFor Developers[文档] 插件开发入门(manifest / 迁移 / 独立

[文档] 插件开发入门(manifest / 迁移 / 独立页)

#1OPYeCha Team· 145 views

插件开发入门

一个第三方插件 = plugins/<id>/ 目录 + 一个返回数组的 plugin.php 清单。

manifest 字段

字段说明
id / name / ver / desc / author / license基础信息
requires.core最低内核版本
toggle是否可在后台停用(默认 true)
tables自有表(缺表时自动跑 migrations)
uninstall['tables'=>..,'options'=>..,'like'=>..] 卸载清理项
admin['label'=>'菜单名','desc'=>..] 后台菜单
pages[['slug'=>'my-page','title'=>'标题']] 前台独立页
page_file / page_fn独立页实现文件与函数(函数接收 slug,返回 ['html'=>..,'title'=>..]
admin_file / admin_fn后台页实现(函数返回 html)
blocks侧栏块清单;register_file启用时 include(注册 Hooks 等)

迁移

migrations/2026xxxx_xxx.php|sql:幂等建表即可,例如:

$t = Db::t('my_table');
Db::run("CREATE TABLE IF NOT EXISTS {$t} ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY ) ...");

独立页示例(仿 /forum)

function yc_my_page(string $slug): array {
    return ['html' => '<h1>Hello</h1>', 'title' => 'Hello'];
}

安全约定

  • 所有 POST 必须 Csrf::field() 表单内 + 服务端 Csrf::check()
  • 输出一律 e() 转义;Markdown 渲染请用内核 Markdown::render(自带转义与 URL 白名单)
  • 写库表名一律 Db::t('name')(自动加 ye_ 前缀)
  • 页面高权限操作记得 Auth::isAdmin() 校验

上架

包成 zip(根目录即内容),去官网「市场 → 申请上架」:官方会做下载/结构/清单/PHP 语法/SHA 校验后发布。

0 replies

No replies yet — be the first.
Log in to join the discussion. Log in →