xnx_friendlink 友情链接插件
功能
完整的友情链接管理系统:前台自助申请、后台审核、EdgeOne 边缘检测、分类展示、酷站推荐
前台友链列表页(/links.htm)+ 申请弹窗(Modal),无独立申请页
后台审核流程:待审核 → 通过/拒绝(含拒绝原因)→ 通知申请人
批量操作:批量通过/拒绝/删除/上下线,批量通过时自动触发检测
EdgeOne 边缘检测:部署 check.js + cron.js 到 EdgeOne 边缘节点,并发检测目标站是否含本站链接
本地 curl 检测:作为 EdgeOne 的备选方案,逐条 curl 检测
检测结果:HTTP 状态码、响应时间、是否含本站链接、链接状态(正常/失联/撤链)
检测日志表:每次检测留痕,便于追溯
酷站推荐:独立于友链的酷站分类管理,存储在 settings 中(JSON)
申请限制:每日限额(按 uid + ip 容斥去重)、申请间隔、登录要求、验证码
通知配置:申请时通知管理员、通过/拒绝时通知申请人
排序规则:按权重 / 按时间
自动迁移:安装时自动从旧版 friendlink 表迁移数据
隐藏系统原有友链区块(通过 JS 隐藏不带 data-xnx-fl 属性的友链卡片)
Bootstrap 5 + htmx 4 + 原生 JS,无 jQuery 依赖
侧边栏缓存:300s TTL,写操作后自动清理
文件结构
plugin/xnx_friendlink/
├── conf.json
├── install.php / uninstall.php
├── setting.php + setting.htm # 后台审核/管理/设置
├── admin.php
├── update.md
├── model/
│ └── FriendLinkService.php # 服务类(CRUD / 审核 / 检测 / 缓存 / 酷站)
├── route/
│ ├── links.php # 前台友链列表页
│ ├── apply.php # 申请逻辑(被 links.php include)
│ ├── api_link.php # EdgeOne 回传 API(POST /xnx_friendlink_api.htm)
│ └── cool_sites.php # 后台酷站管理
├── hook/
│ ├── model_inc_file.php / model_inc_end.php
│ ├── index_route_case_end.php # 注册 /links 路由
│ ├── admin_index_route_case_end.php # 注册后台路由
│ ├── sidebar_friendlink_before.htm # 隐藏系统原有友链
│ ├── sidebar_friendlink_after.htm # 注入插件友链卡片
│ ├── index_site_brief_after.htm
│ ├── thread_side_after.htm
│ ├── lang_zh_cn_bbs.php
│ ├── lang_zh_tw_bbs.php
│ └── lang_en_us_bbs.php
├── edgeone/
│ ├── check.js # EdgeOne 边缘检测函数(部署到 EdgeOne)
│ └── cron.js # EdgeOne 定时触发器(定期拉取任务并检测)
├── admin/view/htm/
│ ├── link_admin.htm
│ └── cool_sites_admin.htm
├── static/js/apply.js
└── view/htm/links.htm
配置流程
后台启用插件
进入「插件设置」→「基本设置」→ 填写本站域名、本站信息(名称/URL/描述/Logo)、申请须知
配置申请限制:每日限额、申请间隔、是否要求登录、是否要求验证码
配置通知:申请时通知管理员、通过/拒绝时通知申请人
可选:切换到「酷站推荐」→ 配置酷站分类和站点(存储在 settings 中)
可选:配置 EdgeOne 边缘检测 → 部署 edgeone/check.js 和 cron.js 到 EdgeOne,填写安全密钥
测试:前台访问 /links.htm 看友链列表,提交申请后后台审核
测试:后台「批量检测」验证友链是否 reciprocatable