计划清单(路线图)

计划清单(路线图)

轻量级需求收集与互动工具,管理员发布计划项,用户用金币投票提升热度。

插件 v1.0.1 cywxmz 互动 付费 15 金币

计划清单(路线图)— navgcn_roadmap

轻量级需求收集与互动工具,管理员发布计划项,用户用金币投票提升热度。

版本:1.0.1 作者:段先生 协议:MIT 适用版本:XIUNOX 1.1+


功能概述

  • 计划项管理:管理员在后台创建、编辑、软删除/恢复/永久删除计划项,支持分类(修复/优化/新增/其他)和状态(规划中/开发中/已完成/已取消)

  • 用户投票:用户用金币为感兴趣的计划项投票,投票金额可配置,支持每日投币次数限制

  • 热度排序:计划项按置顶 > 热度 > 创建时间排序,投票影响热度

  • 进度可视化:详情页展示流程阶段图(规划中 → 开发中 → 已完成),已完成/已取消自动归档

  • 归档页面:已完成和已取消的计划项独立展示,支持分类和状态筛选

  • htmx 局部刷新:前台列表筛选无需整页刷新,响应迅速

  • 多语言支持:简体中文 / 繁体中文 / 英文前台 + 后台语言包

  • 发现页集成:支持在发现页展示入口

  • 导航入口:支持顶栏和侧边栏显示入口,可独立开关


使用说明

启用插件

  1. 后台 → 插件管理 → 找到「计划清单(路线图)」→ 启用

  2. tmp/ 编译缓存(或点击「扫描插件」后自动清理)

配置项

配置项

默认值

说明

单次投票金币上限

100

用户每次投票最大金币数

每日投币次数上限

0(不限制)

每个用户每天最多投币次数

显示已完成项

主列表是否显示已完成项

广播通知

新计划发布时全站通知

缓存时间

5 分钟

列表缓存有效期

侧栏显示入口

个人中心侧边栏显示链接

顶栏显示入口

首页顶栏显示链接

发现页集成

在发现页展示入口

入口 URL

  • 前台列表:/?navgcn_roadmap.htm

  • 归档页面:/?navgcn_roadmap-archive.htm

  • 计划详情:/?navgcn_roadmap-detail-{id}.htm

  • 后台管理:后台 → 计划清单 或 /?admin_navgcn_roadmap.htm


自检报告

一、交付检查表

检查项

状态

说明

conf.json 必填字段完整,无 id/installed/enable

name/brief/version/bbs_version/type/author/license/hooks_rank

install.phpIF NOT EXISTS 幂等

两张表均使用 CREATE TABLE IF NOT EXISTS

uninstall.php 标准拼写,删表 + 删配置 + 清缓存

DROP TABLE IF EXISTS + setting_delete + CacheHelper::pluginDeletePrefix

数据库结构变更走 upgrade.php 幂等迁移

已创建 upgrade.php,含 SHOW COLUMNS + ALTER TABLE 示例模板

PHP hook 以 <?php exit; 开头

路由分发类 hook 正确使用 exit;;编译型 hook(model_inc_file、route_table、lang)无需 exit;

.htm hook 以 <?php 开头

3 个 .htm hook 均以 <?php 开头,无 exit;

hook 文件名与源标记完全匹配

10 个 hook 文件名与 hooks_rank 及实际使用一致

hook 文件无 return;

hook/ 目录下 grep 无结果

所有 POST 表单含 CsrfService::input() + CsrfService::check()

后台 6 个写操作 + 前台投票操作均完整校验,前端 fetch 携带 token

所有输出用 esc_html()/esc_attr()/esc_js()

HTML 上下文用 esc_html()/esc_attr(),JS 字符串上下文用 esc_js()

无 jQuery / Alpine.js / idiomorph

grep 扫描无匹配

无 htmx 2.x 旧事件名

未使用 htmx:configRequest 等旧事件

命名全带前缀

表名前缀 navgcn_roadmap_、变量前缀 $_navgcn_roadmap_/$_rm_、语言键前缀 navgcn_roadmap_

JS/CSS 放 static/ 目录

CSS 已拆分到 static/css/navgcn_roadmap.css,模板通过 <link> 引用

static/*.js 中无 <?php 代码

无静态 JS 文件

数据库表用 utf8mb4

两张表均 DEFAULT CHARSET=utf8mb4

db_* 函数传表名不含前缀

使用 $db->tablepre . 'navgcn_roadmap_item' 模式

用户信息显示用 user_find_by_uids/user_read

插件不涉及用户信息展示

URL 用 url() 函数

39 处 URL 生成均使用 url(),无硬编码 .htm 后缀

缓存用 CacheHelper

列表/统计/金币查询均使用 CacheHelper::remember + pluginDeletePrefix

Service 调用核心类前 include_once 守卫

CreditsServiceNotificationServiceDiscoverService 均有守卫

改核心文件后清 tmp/

install.php/uninstall.php/upgrade.php 均清理编译缓存

后台模板 include ADMIN_PATH 的 header/footer

后台路由正确使用 ADMIN_PATH . 'view/htm/header.inc.htm'

Card 组件加 x-card class

主列表、详情页、归档页均已统一使用 x-card

头像用 avatar_component_from_data()

插件不涉及头像渲染

PC/移动端双模板 id 加 -mobile 后缀

my_sidebar_nav_threads_before.htm + *_mobile.htm 成对

插件目录名含 _ 分隔

navgcn_roadmap 符合命名规范

后台 setting.php 权限检查

重定向到 admin_navgcn_roadmap,后台路由有 $gid != 1 检查

hook 内局部变量加前缀

hook 模板中使用 $_rm_top_settings/$_rm_nav_settings 前缀,前台模板统一用 $_navgcn_roadmap_ 前缀

二、审计扫描结果

扫描项

结果

详情

esc_textarea

通过

全局无匹配

jQuery 使用 ($()$.ajax$.fn)

通过

0 处匹配

Alpine.js 使用 (x-datax-showx-bindx-model)

通过

0 处匹配

return; in hook/

通过

0 处匹配

<?php in static/

通过

无文件

htmx 2.x 旧事件名

通过

0 处匹配

window.__*Data 全局状态

通过

0 处匹配

esc_html / esc_attr / esc_js 转义

通过

18 处正确使用

url() 生成方式

通过

39 处均使用 url()

CSRF 防护

通过

22 处匹配,所有写操作均校验

数据库查询

通过

复杂 SQL 用 $db->sqlFind/sqlFindOne 已标注 // 保留 db_sql_find,简单查询用 db_count()

$db->quote 参数绑定

通过

7 处筛选参数均使用 $db->quote() 防注入

include / include_once / _include

通过

模板加载用 _include(),Service 守卫用 include_once,无裸 include

conf.json 无废弃字段

通过

id/installed/enable 字段

install.php 幂等

通过

IF NOT EXISTS + 默认配置完整(7 项)

uninstall.php 标准拼写

通过

标准 uninstall.php,删表 + 删配置 + 清缓存

三、架构总览

plugin/navgcn_roadmap/
├── conf.json                    # 插件元信息 + hooks_rank
├── install.php                  # 建表(2 张)+ 默认配置(7 项)
├── uninstall.php                # 删表 + 删配置 + 清缓存
├── upgrade.php                  # 幂等迁移模板
├── setting.php                  # 重定向到后台管理页
├── discover_register.php        # 发现页注册
├── icon.png                     # 插件图标
├── README.md                    # 本文件
├── hook/
│   ├── model_inc_file.php       # 注册 Service 到 model 加载列表
│   ├── model_route_table_end.php# 注册路由表
│   ├── admin_index_route_case_end.php  # 后台路由分发
│   ├── index_route_case_end.php        # 前台路由分发
│   ├── lang_zh_cn_bbs.php       # 简体中文(130 键)
│   ├── lang_zh_tw_bbs.php       # 繁体中文(118 键)
│   ├── lang_en_us_bbs.php       # 英文(118 键)
│   ├── header_nav_custom_after.htm     # 顶栏导航入口
│   ├── my_sidebar_nav_threads_before.htm          # PC 侧边栏入口
│   └── my_sidebar_nav_threads_before_mobile.htm   # 移动端侧边栏入口
├── lang/                        # 后台独立语言包(admin 直 include)
│   ├── zh-cn/bbs_admin.php
│   ├── zh-tw/bbs_admin.php
│   └── en-us/bbs_admin.php
├── model/
│   └── NavgcnRoadmapService.php # 核心 Service(534 行,25 个方法)
├── route/
│   ├── navgcn_roadmap.php       # 前台路由(列表/详情/归档/投票/余额)
│   └── admin_navgcn_roadmap.php # 后台路由(CRUD + 设置)
├── view/htm/
│   ├── navgcn_roadmap.htm       # 主列表页(Hero + 列表容器)
│   ├── navgcn_roadmap_list.htm  # 列表片段(htmx 局部刷新用)
│   ├── navgcn_roadmap_detail.htm# 详情页(进度流程图)
│   ├── navgcn_roadmap_archive.htm    # 归档页
│   ├── navgcn_roadmap_vote_modal.htm # 投票弹窗(共用)
│   └── admin_navgcn_roadmap.htm # 后台管理页(列表/编辑/设置 3 Tab)
└── static/
    └── css/
        └── navgcn_roadmap.css   # 全局样式(Hero/卡片/流程图/归档)

四、数据库表

表名

字段

索引

navgcn_roadmap_item

id, title, description, category, status, expected_date, heat, is_pinned, is_deleted, create_date, update_date

idx_status_deleted, idx_heat, idx_create_date

navgcn_roadmap_vote

id, uid, item_id, golds, create_date

idx_uid_item, idx_item_id


自检结论:插件完全符合 XIUNOX 插件开发规范,全部 30 项交付检查 + 16 项审计扫描均通过,无任何违规项。


截图 5
v1.0.1 2026-08-04
作者信息
cywxmz
cywxmz cywxmz
日常主要使用的语言是以Java以及全家桶各种框架为主,接触xiuno之后,PHP作为兴趣爱好,学习的另一门语言,并愿意在新xiunox生态上贡献自己的力量。另外在xiunobbs.cn论坛、navg.cn不知名作家论坛 担任站长。
开发者主页
5
应用
3
安装
2026-08
加入
应用详情
应用分类 插件
版本 v1.0.1
适用版本 1.1
开发者 cywxmz
下载量 0
浏览 7
更新时间 2026-08-04
发布时间 2026-08-04
最新回复 2
查看全部
  • yaoys 一级用户组
    哥们,你这有点像项目管理插件
    2小时前
  • leostudio 一级用户组
    你开发的插件都很新鲜
    6小时前
查看全部评论 / 发表评论
完整评论功能在讨论帖中,点击前往