- 社区相册ID community_album版本 1.0.1插件制作者 cxk123售价 30 积分1099 行 / 59.6 KBHook / 路由 / 后台页把用户上传过的图片附件组织成相册,用图片墙浏览:相册列表(网格 + 封面缩略图 + 张数)、收费插件安装说明购买后点击“授权码”获取一次性授权码;在后台 > 插件广场点击在线安装或更新,并填写该授权码。已购买用户更新免费:每次在线安装或更新前,重新点击“授权码”获取新的一次性授权码即可,无需再次购买;也可直接下载新版后用后台“插件上传”更新。尊重并感谢他人劳动,请勿传播代码。app/plugins/community_album/plugin.php插件预览6 张开发日志已有 2 条
此项目接受所有登录用户协助维护和提交更新。
主楼 插件质量报告
插件:
community_albumHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 app.boot 全站请求启动 否 5 - - - 写 plugin_community_album_albums, plugin_community_album_photos, plugin_community_album_audit sidebar.feature_links 首页/侧栏快捷功能 否 5 - - - - user.menu_links 个人卡片/移动端我的菜单(展示位置:个人卡片) 否 4 - - - - user.profile_tab_allowed 用户资料页标签页可见性判定 否 3 - - - - user.profile_tab_data 用户资料页标签数据 否 3 - - - - user.profile_tabs 用户资料页标签栏(展示位置:个人主页Tab) 否 3 - - - - topic.index_template 非系统hook 否 1 - - app_attachments 读 plugin_community_album_photos, plugin_community_album_albums 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_community_album_albums字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 plugin_community_album_photos字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 plugin_community_album_audit字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 版本 1.0.0 更新:
首次上架(1.0.0)。市场里 相册 / album / gallery 此前 0 命中:论坛的图片一直只能靠「主题里贴的附件」散着看,没有「把同一组图收成一本、
以后还能翻回来」的地方。这一款补的就是这个:把用户上传过的图片附件组织成相册,用图片墙浏览。- 相册列表:网格 + 作者 + 张数,按最近更新排序 + 分页;游客可看公开相册(站长可关)。
- 相册详情图片墙:一屏铺开整册图片、点开原图看大图;封面那张带「封面」角标。
- 管理自己的相册:建册(标题 / 简介 / 「仅自己」勾选)、改信息、从本人已上传的图片里勾选加入、
移除所选、删册(先删图片再删相册,不留孤儿行)。
- 封面:每本相册有一张封面,图片墙上用「封面」角标标出来(自动落第一张,也可由动作接口改成任意一张)。
- 个人主页「相册」页签:点进某个人的主页就能看他公开的相册,与详情页同一套可见性口径。
- 可见性:「公开 / 仅自己」两档;「仅自己」不出现在任何列表与页面(管理团队也不放行,偏严不偏松);
只接受本人上传的图片入册,不替别人泄露附件路径。页面上写清「文件是静态直出、不是加密存储」。
- 后台一个 Tab:相册 / 图片 / 已下架三行统计 + 开关(启用、允许「仅自己」、允许游客浏览、个人主页页签、导航入口)
+ 三个上限(每人相册数、每册张数、列表每页)+ 一键校准计数(按真实行数重算 photo_count 与失效封面)
+ 最近操作审计表(建册 / 改信息 / 入册 / 移除 / 设封面 / 删册都留痕)。不重复造轮子:不复制文件、不接管上传,只引用核心
app_attachments里is_image=1的本人图片行,
所以与任何上传后端(对象存储 / 图床 / 网盘)都能共存;核心app_*表一列都不加,自有三张表全plugin_community_album_前缀。查询预算(实测):相册列表 ≤4 条、相册详情 ≤5 条(图片行一次
IN批查,图多也不放大)、首页 0 条(不挂首页槽位)。
并发:并排请求同一附件入册只会得到 1 行、计数只 +1,唯一键冲突就地吞掉,不会把插件打下线。验收:
tools/lab_verify_community_album.sh481 项通过 / 0 失败(私有站点副本 + 独占端口);
六道静态门禁全绿。已知边界(1.0.0 首版,如实写明):① 相册列表的卡片只有标题 / 作者 / 张数,
不显示封面缩略图(封面目前只体现在详情页的「封面」角标);② 「设封面」有服务端动作与角标,
但前台还没有按钮,需要时得直接发community_album_do=cover。版本 1.0.1 更新:
1.0.1:修掉 4 条由独立验收线实测上报的缺陷。不涉数据结构变更(三张自有表与结构戳 1 都不动),
老站点覆盖文件即生效。① 相册列表卡片现在有封面缩略图
原来卡片只有「标题 / 作者 / 张数」三行文字,封面只在详情页以角标体现(community_album_cover_url() 定义了却没人调用)。
现在列表与个人主页页签的卡片都渲染封面缩略图;封面附件行由一次 IN 批查取回(不按册逐条查,
行数翻倍语句数不涨),封面缺失时在 SQL 里回退到本册第一张,附件行已被删时渲染占位块而不是 <img>
—— 前端不会出现破图。② 详情页有「设为封面」按钮了
工具区新增「设为封面」下拉(当前封面 selected + 文案标注「(当前封面)」),图片墙上每张图另有内联「设为封面」按钮
(HTML5 form= 指回同一张表单,不生成 N 张表单)。两条入口都走原有 cover 动作(POST + CSRF + 审计留痕);
不是本人 / 不是本册的提交仍是 404 且零写入。③ 个人主页「相册」页签不再吞掉整页外壳(重要修复)
1.0.0 拿到的是整壳 shell_html(...),却只返回自己的区块 → 点进「相册」页签后页面上没有页签栏,也就切不回别的页签。
现在只替换列表区块(<ul class="post-list">),页签栏 / 侧栏 / 外壳原样保留;结构对不上时原样返回,绝不整页替换。④ 后台新增「下架 / 恢复上架」入口
hidden=1 的过滤口径早就在,但没有写路径(该字段恒为 0)。后台现在可按相册 id 下架 / 恢复(POST + CSRF +
审计 hide/restore 留痕):下架后公开列表与详情对非管理团队不可见、本人详情 404(「我的相册」里仍有该行并标「已被下架」),
管理团队可见并标「已被管理团队下架」;恢复即回到公开列表。重复下架给「本来就已经下架」回执且不重复写审计;
不存在的 id 给明确回执、零写入。同步:manifest 版本 1.0.1(dist 冻结产物 plugin/dist/community_album_1.0.1.php1)。
验收套件补了「列表封面 / 一次 IN 批查 / 无封面与附件缺失的优雅降级 / 设封面两条入口 / 页签整壳保留硬断言 /
下架恢复产品路径与越权」等断言:593 项通过 / 0 项失败;七道静态门禁全绿,首页查询预算差值仍为 0。
查询预算(实测):相册列表 4 条(含封面批查)、相册详情 3 条、个人主页页签 2 条、首页 0 条。- 82天前
不错不错,刚好需要这个个人相册插件👏
- 82天前
