Xiuno BBS 重构记录贴(17) 插件管理页面优化
贰先生 1小时前

# 插件管理页面优化

## 概述

对后台插件管理页面进行了全面优化,包括插件/模板分类、智能排序、搜索筛选、网格布局等功能。

## 改动文件

| 文件 | 改动内容 |
|------|----------|
| `install/install.sql` | 新增 `bbs_plugin` 表 |
| `model/plugin.func.php` | 新增数据库操作函数、类型判断函数、修改安装/启用/禁用逻辑 |
| `admin/route/plugin.php` | 新增排序、筛选、搜索逻辑 |
| `admin/view/htm/plugin_list.htm` | 重构为网格布局 + Tab + 搜索筛选 |
| `lib/UpgradeService.php` | 新增 `upgradePluginTable()` 升级步骤 |

## 数据库

### 新增表 `bbs_plugin`

| 字段 | 类型 | 说明 |
|------|------|------|
| `dir` | varchar(64) PK | 插件目录名 |
| `name` | varchar(128) | 插件名称 |
| `type` | tinyint(1) | 0=插件, 1=模板 |
| `installed` | tinyint(1) | 是否已安装 |
| `enable` | tinyint(1) | 是否已启用 |
| `install_time` | int(11) | 安装时间 |
| `enable_time` | int(11) | 最后启用时间 |
| `disable_time` | int(11) | 最后禁用时间 |
| `create_time` | int(11) | 记录创建时间 |
| `update_time` | int(11) | 记录更新时间 |

### 升级方式

通过后台升级页面执行「插件管理表」步骤,会自动创建表并初始化现有插件数据。

## 插件/模板区分

采用混合方案判断插件类型:

1. **优先检查 `conf.json` 中的 `type` 字段**(值为 `theme`/`template`/`skin` 则为模板)
2. **检查目录名关键词**(包含 `theme`/`template`/`skin`/`风格`/`模板` 则为模板)
3. **检查插件名称关键词**

建议插件开发者在 `conf.json` 中添加 `"type": "theme"` 或 `"type": "plugin"` 字段。

## 排序规则

插件列表按以下优先级排序:

1. **刚刚安装**(24小时内)→ 按 `install_time` 倒序
2. **刚启用**(24小时内)→ 按 `enable_time` 倒序
3. **启用中** → 按 `enable_time` 倒序
4. **已安装未启用** → 按 `install_time` 倒序
5. **未安装** → 按名称字母排序

## 前端功能

### Tab 切换

- 全部 / 插件 / 模板 三个标签页,通过 `type` 参数筛选

### 搜索

- 支持按插件名称、简介、目录名搜索,通过 `keyword` 参数

### 状态筛选

- 全部状态 / 已启用 / 已安装未启用 / 未安装,通过 `status` 参数

### 网格布局

- 响应式网格:`col-12` / `col-md-6` / `col-lg-4` / `col-xl-3`
- 每个卡片固定高度,简介区域固定 2 行占位
- 卡片悬停阴影效果

## 新增函数

### `model/plugin.func.php`

| 函数 | 说明 |
|------|------|
| `plugin_is_theme($dir, $conf)` | 判断是否为模板插件 |
| `plugin_db_get($dir)` | 获取单个插件数据库记录 |
| `plugin_db_get_all()` | 获取所有插件数据库记录 |
| `plugin_db_init($dir, $conf)` | 初始化插件数据库记录 |
| `plugin_db_set_installed($dir, $installed)` | 更新安装状态和时间 |
| `plugin_db_set_enable($dir, $enable)` | 更新启用状态和时间 |
| `plugin_db_init_all()` | 批量初始化所有插件数据 |
| `plugin_read_by_dir_with_db($dir)` | 合并数据库和 conf.json 获取插件信息 |

### 修改的函数

| 函数 | 改动 |
|------|------|
| `plugin_install($dir)` | 新增 `plugin_db_init()` + `plugin_db_set_installed()` + `plugin_db_set_enable()` |
| `plugin_unstall($dir)` | 新增 `plugin_db_init()` + `plugin_db_set_installed(0)` + `plugin_db_set_enable(0)` |
| `plugin_enable($dir)` | 新增 `plugin_db_init()` + `plugin_db_set_enable(1)` |
| `plugin_disable($dir)` | 新增 `plugin_db_init()` + `plugin_db_set_enable(0)` |

## URL 参数

访问插件列表页时支持以下查询参数:

| 参数 | 值 | 说明 |
|------|-----|------|
| `type` | 0/1/2 | 0=全部, 1=插件, 2=模板 |
| `status` | 0/1/2/3 | 0=全部, 1=已启用, 2=已安装未启用, 3=未安装 |
| `keyword` | string | 搜索关键词 |

示例:`?admin-plugin.htm&type=1&status=1&keyword=签到`
最新回复 (0)
全部楼主
返回