[topic_collections]淘帖专辑热
- 淘帖专辑ID topic_collections版本 1.4.4插件制作者 233免费879 行 / 61.7 KBHook / 路由 / 后台页创建、订阅和协作维护公开或私密淘帖专辑,让优质文章更容易被发现。app/plugins/topic_collections/plugin.php插件预览1 张开发日志最新 10 条
个人独立维护项目。
淘帖专辑官方安装插件合集主楼 插件质量报告
插件:
topic_collectionsHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 sidebar.stack 全站侧栏组件栈 否 5 - - - 写 plugin_topic_collections_subscriptions;读 plugin_topic_collections_collections, plugin_topic_collections_items top.menu_links 顶部版块导航/移动端版块列表,同一请求只执行一次(展示位置:顶部菜单) 否 5 - - - - topic.after_render 首页/版块列表/主题查看逐条渲染 是(列表跳过) 5 - - - - topic.title_suffix 首页/版块主题列表逐条标题 是 5 - - - - topic.after_view 主题查看页完成加载 否 4 - - - 读 plugin_topic_collections_items, plugin_topic_collections_collaborators user.menu_links 个人卡片/移动端我的菜单(展示位置:个人卡片) 否 4 - - - - topic.actions 主题查看页操作区(展示位置:主题操作) 否 3 - - - - content.before_delete 内容删除操作 否 2 - - - 写 plugin_topic_collections_items, plugin_topic_collections_collections 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_topic_collections_collections字段 类型 可空 默认值 约束 id id 否 - 主键、自增 user_id uint 否 - 唯一 name string 否 - 唯一 description text 是 - - visibility key 否 'public' - item_count uint 否 0 - created_at uint 否 - - updated_at uint 否 - - plugin_topic_collections_items字段 类型 可空 默认值 约束 id id 否 - 主键、自增 collection_id uint 否 - 唯一 topic_id uint 否 - 唯一 user_id uint 否 - - created_at uint 否 - - plugin_topic_collections_subscriptions字段 类型 可空 默认值 约束 collection_id uint 否 - 主键 user_id uint 否 - 主键 created_at uint 否 - - plugin_topic_collections_collaborators字段 类型 可空 默认值 约束 collection_id uint 否 - 主键 user_id uint 否 - 主键 added_by uint 否 - - created_at uint 否 - - 版本 1.0.13 更新:
本次改造的功能升级日志(淘帖专辑 插件,版本 1.0.12 → 1.0.13):🔧 稳定性与安全性
- 修复 CSS 冲突事故:插件 CSS @media 块缺少闭合 },导致其后的所有插件样式(含头像)被吞进媒体查询;补齐括号并重建主题资源
- 系统性排查:全量核对循环查询(无 N+1)与索引设计(与 EXPLAIN 实测一致,无需改动)
🎯 管理页重构
- 独立管理页路由:topic_collection_manage 新增独立页面,取代专辑页内 details 折叠式管理;含基本设置 / 移除文章 / 协作者增删 / 删除专辑
- 分区块卡片布局:设置、移除文章、协作者、删除各自独立卡片;表单改单列;移除按钮改无背景纯文字;删除按钮颜色优化(红字+淡红底,hover 红底白字)
- 列表细节:移除按钮右对齐、列表自适应宽度、移动端自动换行
- 入口调整:淘帖列表卡片去掉"管理"按钮,保留专辑详情页的管理入口
📱 前端交互升级
- 主题面板标题"淘帖专辑" 变为链接(指向大家的淘帖)
- 收录表单旁新增 "我的淘帖 →" 入口,与"收录到专辑"标签并列
- 面包屑:首页 / 我的淘帖(可点击)/ 专辑名
- 响应式:推荐专辑 PC 3 列、移动端 1 列;面板与管理区适配窄屏
⭐ 收录体验
- 已收录专辑可再次选择:选中时按钮切换为红色"移出专辑",直接退订
- 新增"全部取消收录":一次从所有自己可管理的专辑中移除,并提示移除数量
- 服务端配合:item_remove 支持从主题页触发(自动跳回主题完成)
🧹 其他
- 移除旧版迁移:删除 plugin_topic_curation_* 旧表兼容迁移代码,安装只建新表+索引(不考虑老用户升级)
- 插件后台改为单列布局:设置字段单列显示
- 版本升到 1.0.13
版本 1.0.13 更新:
优化UI版本 1.0.14 更新:
增加通知居然有这个插件 我都打算自己写一个了
版本 1.0.14 更新:
优化前台UI版本 1.0.14 更新:
优化UI版本 1.0.19 更新:
一、通知机制改造(懒统计)- 移除“订阅者实时群发通知”的万行写放大,加入 subscriptions.seen_at 已读水位
- 新收录只写 1 行 item;登录用户在首页专属卡片看到「专辑名 + 未读徽章 N」
- 进专辑详情页后水位自动推进,未读清零
二、首页卡片(2 轮迭代)
- 第一版走 sidebar.feature_quick 快捷链接 → 独立 sidebar.stack 卡片「淘帖专辑更新」:每行 专辑名(左) + N 徽章(右),行间分隔、移动可用
- 点击进入专辑后,本次 N 条新收录主题每行标题右侧带「新」徽标(topic.title_suffix 钩子,与卡片同源判定:created_at > 旧 seen_at)
三、性能优化(3 处 + 回暖)
┌──────────┬────────────────────────────────────────────────────────────────────────────────────┐
│ 点 │ 措施 │
├──────────┼────────────────────────────────────────────────────────────────────────────────────┤
│ 聚合查询 │ 新增 c.updated_at > s.seen_at 闸门先行过滤无更新专辑;再加同页缓存 │
├──────────┼────────────────────────────────────────────────────────────────────────────────────┤
│ 列迁移 │ ensure_schema 幂等补列 + 全局标记短路,避免每请求查元数据;首次自动对齐历史水位 │
├──────────┼────────────────────────────────────────────────────────────────────────────────────┤
│ 已读写入 │ seen_at 只在有新内容时写(WHERE seen_at < MAX(items.created_at)) │
├──────────┼────────────────────────────────────────────────────────────────────────────────────┤
│ 通知 │ 保留但默认关闭;后台开关开启后批量写入(分块 100、排除操作者与主题作者,避免重复) │
└──────────┴────────────────────────────────────────────────────────────────────────────────────┘四、新增功能
- 订阅者通知开关(后台站点设置,默认关),文案:你订阅的专辑《xxx》收录了新主题《yyy》,链接挂在主题上
- 顶部菜单「淘帖」入口,链接到大家的淘帖
- 主题作者通知保留(实时单条)
五、线上排障
- 卡片首次不显示:根因是插件未同步(manifest/hook 未刷新到运行态),后台“同步插件”后即恢复
- 提示:后续升级文件后记得同步插件,否则新 hook(如 top.menu_links)不会生效
性能结论
新增逻辑均为索引内小查询/O(1) 判断;唯一“每次页面”成本是首页聚合(已有闸门+缓存),量级可控。剩余可选微优化:详情页两次查询可合并为一
次 JOIN(未做)。版本 1.0.20 更新:
实时通知(进通知中心)┌────┬──────────────────────┬────────────┬──────────────────────────────────────────────────────────┬──────────────────────────┐
│ # │ 触发时机 │ 收件人 │ 文案 │ 开启方式 │
├────┼──────────────────────┼────────────┼──────────────────────────────────────────────────────────┼──────────────────────────┤
│ 1 │ 主题被收录进专辑 │ 主题作者 │ 你的主题《yyy》被收入到淘帖专辑《xxx》。(点开跳主题) │ 常开 │
├────┼──────────────────────┼────────────┼──────────────────────────────────────────────────────────┼──────────────────────────┤
│ 2 │ 专辑有新主题被收录 │ 所有订阅者 │ 你订阅的专辑《xxx》收录了新主题《yyy》。(批量写、去重) │ 后台开关,默认关 │
├────┼──────────────────────┼────────────┼──────────────────────────────────────────────────────────┼──────────────────────────┤
│ 3 │ 专辑被某用户订阅 │ 专辑创建者 │ 你的淘帖专辑《xxx》被 yyy 订阅。 │ 常开(自己订阅自己不发) │
├────┼──────────────────────┼────────────┼──────────────────────────────────────────────────────────┼──────────────────────────┤
│ 3b │ 专辑被某用户取消订阅 │ 专辑创建者 │ 你的淘帖专辑《xxx》被 yyy 取消订阅。 │ 常开 │
├────┼──────────────────────┼────────────┼──────────────────────────────────────────────────────────┼──────────────────────────┤
│ 4 │ 专辑邀请协作者 │ 被邀请人 │ 你已被邀请协作维护淘帖专辑《xxx》。 │ 常开 │
└────┴──────────────────────┴────────────┴──────────────────────────────────────────────────────────┴──────────────────────────┘(创建者 ≠ 主题作者时,1 和 2 可能同时触发;各自独立。)
非通知渠道(不占通知中心)
- 首页侧栏卡片「淘帖专辑更新」:专辑名 + 未读徽章 N(懒统计,需登录);进详情页标记已读
这个插件增加的帖子页查询次数挺多的
版本 1.0.21 更新:
在主程序升级到9.0之前,请不要更新此插件,避免兼容问题版本 1.0.24 更新:
优化样式细节版本 1.0.25 更新:
优化细节版本 1.0.26 更新:
修正通知格式或者积分变动不进积分规则的问题版本 1.0.27 更新:
主题详情页 topic_collections_after_view() 不再查询当前用户的可管理专辑版本 1.0.31 更新:
批量预载优化版本 1.0.32 更新:
支持v10版本 1.0.33 更新:
更新版本号版本 1.1.2 更新:
优化位置版本 1.3.0 更新:
优化布局版本 1.4.2 更新:
优化布局版本 1.4.3 更新:
优化细节版本 1.4.4 更新:
优化细节