- 二手市场ID marketplace版本 1.0.0插件制作者 cxk123售价 30 积分1774 行 / 103.1 KBHook / 路由 / 后台页把闲置物品变成站点里的一等公民:发布(标题 / 分类 / 成色 / 价格 / 描述 / 一张本人已上传的封面图)→收费插件安装说明购买后点击“授权码”获取一次性授权码;在后台 > 插件广场点击在线安装或更新,并填写该授权码。已购买用户更新免费:每次在线安装或更新前,重新点击“授权码”获取新的一次性授权码即可,无需再次购买;也可直接下载新版后用后台“插件上传”更新。尊重并感谢他人劳动,请勿传播代码。app/plugins/marketplace/plugin.php插件预览6 张开发日志已有 1 条
此项目接受所有登录用户协助维护和提交更新。
主楼 版本 1.0.0 更新:
首次上架(1.0.0)。市场里 二手 / 跳蚤 / 闲置 / 交易 / 易物 / 拍卖 此前 0 命中,核心侧也没有任何商品概念:
app_*十二张表里没有商品实体、没有价格字段、没有订单或成交记录、没有联系方式字段
(全仓扫描的 20 个关键词里只有 3 条命中,全部落在Setup.php的软件许可条款模板里,与交易功能无关)。
也就是说,站内想把一件闲置挂出来,除了「发个帖子」没有别的容器 —— 而帖子既没有价格、没有在售/已售状态,
更没有「联系我但别把我的微信号公开」这件事。这一款补的就是这条最短闭环:
发布 → 浏览筛选 → 详情 → 站内联系 → 标记已售 / 下架,全程只做信息撮合。- 发布:标题 / 分类 / 成色(全新…有瑕疵五档)/ 价格口径(定价 · 面议 · 免费送,定价精确到分)/
描述 / 联系方式 / 可见范围 / 封面图,一张表单一次提交完事。同一时间窗内重复提交靠
submit_key唯一键兜底(幂等复用赢家那一行,不产生重复行)。- 浏览与筛选:关键词(标题或描述)、分类、状态、排序(最新 / 价格升 / 价格降)、分页;
列表卡片给出封面、标题、价格、分类、状态徽标、卖家与发布时间。
- 详情页:封面大图、价格、状态徽标、分类 / 成色 / 可见范围、卖家与浏览数、
「我要联系卖家」按钮、详细描述、以及「卖家的其它闲置」(同一位卖家的在售条目)。
- 隐私优先(本插件最该被看见的一条):联系方式有两档口径,默认就是最保守的那一档 ——
「仅站内私信」:选它之后联系方式在写入时被强制清空,库里根本没有可泄露的串,
联系人走「我要联系卖家」→ 系统替你给对方发一条只含商品标题与链接的站内私信,双方都不必暴露联系方式。
即使卖家改选「登录后可见」:游客在列表 / 详情 / 搜索三处都拿不到原文(连脱敏形态都没有,只有「登录后可见」占位块),
登录用户在列表与搜索里也只看到脱敏形态(保证与原串不相等),只有详情页给全文。
这三处的判定共用同一个函数,不会随页面漂移;私信正文里同样不含联系方式。- 可见性与状态只有一份真源:管理团队全可见 · 作者看得见自己的下架条目 · 其他登录用户看不到已下架
(已售仍然可见)· 游客只看公开且在售的。列表 / 详情 / 搜索三面由同一对函数(一条 SQL 谓词 + 一条 PHP 判据)给出。
- 状态机与配额都是 CAS:
active / sold / hidden的每次迁移都是
UPDATE … WHERE id=? AND user_id=? AND status=?+rowCount()===1(两个人同时点「标记已售」只有一个成功);
每人「同时在售条数」额度用独立的配额表 CAS 抢占,只有从 active 离开才归还名额;
越权操作一律 404 且零写入(items / audit 增量双断言)。- 图片只引用、不接管:封面只能从本人已上传的核心图片附件里选(服务端校验归属,绝不信表单),
不复制文件、不写附件表、不接管上传;封面附件被删掉时渲染占位块而不是破图。
- 后台一个 Tab:全部 / 在售 / 已售 / 已下架统计 + 设置(总开关、允许普通用户发布、侧栏入口、
每人同时在售上限、每页条数、审计保留条数、新建默认联系方式、分类清单)+ 商品队列
(按状态筛选,含强制下架 / 恢复上架 / 删除)+ 最近审计流。- 自有表、零核心改动:三张
plugin_marketplace_*表 + 五枚具名索引,不碰任何app_*表;
卸载把表、索引、配置戳一起清干净;
app.boot只比一个结构版本戳(0 条 SQL)就能自愈重装。- 三驱动可移植:不用窗口函数、不手写
ON CONFLICT/INSERT IGNORE(幂等写入走核心的
app_db_insert_ignore())、时间一律 unix 秒整数、建删表索引只走app_db_*。- 页面级无 N+1:列表 3 条、详情 4 条以内、我的 6 条、后台 6 条插件语句(多出来的都是批查,
与行数无关);行数翻倍后列表页语句数不增长;首页零额外开销(启用 = 停用,差值 0)。
本版为 v1.0.0 首次上架:验收套件 536 项通过 / 0 项失败,
七道静态门禁 0 违规 / 0 待人工确认,全仓suite_integrity_audit62 个套件七条全 ✓。插件质量报告
插件:
marketplaceHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 app.boot 全站请求启动 否 5 - - - 写 plugin_marketplace_quota, plugin_marketplace_items, plugin_marketplace_audit sidebar.feature_links 首页/侧栏快捷功能 否 5 - - - - user.menu_links 个人卡片/移动端我的菜单(展示位置:个人卡片) 否 4 - - - - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_marketplace_quota字段 类型 可空 默认值 约束 user_id uint 否 - 主键 used uint 否 0 - updated_at uint 否 0 - plugin_marketplace_items字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 plugin_marketplace_audit字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析