• cxk123
    二手市场
    ID marketplace版本 1.0.0插件制作者 cxk123售价 30 积分1774 行 / 103.1 KBHook / 路由 / 后台页
    把闲置物品变成站点里的一等公民:发布(标题 / 分类 / 成色 / 价格 / 描述 / 一张本人已上传的封面图)→
    收费插件安装说明购买后点击“授权码”获取一次性授权码;在后台 > 插件广场点击在线安装或更新,并填写该授权码。已购买用户更新免费:每次在线安装或更新前,重新点击“授权码”获取新的一次性授权码即可,无需再次购买;也可直接下载新版后用后台“插件上传”更新。尊重并感谢他人劳动,请勿传播代码。
    app/plugins/marketplace/plugin.php
    开发日志已有 1 条

    此项目接受所有登录用户协助维护和提交更新。

    • cxk123
      cxk123
      版本 1.0.0 b7376ca054db 更新:首次上架(1.0.0)。 市场里 二手 / 跳蚤 / 闲置 / 交易 / 易物 / 拍卖 此前 **0 命中**,核心侧也**没有任何商品概念**: `app_*` 十二张表里没有商品实体、没有价格字段、没有订单或成交记录、没有联系方式字段 (全仓扫描的 20 个关键词里只有 3 条命中,全部落在 `Setup.php` 的软件许可条款模板里,与交易功能无关)。 也就是说,站内想把一件闲置挂出来,release
    主楼
  • cxk123

    版本 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_audit 62 个套件七条全 ✓。

    #1
  • 质量报告

    插件质量报告

    插件:marketplace

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    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_iduint否-主键
    useduint否0-
    updated_atuint否0-

    plugin_marketplace_items

    字段类型可空默认值约束
    -动态定义--无法静态解析

    plugin_marketplace_audit

    字段类型可空默认值约束
    -动态定义--无法静态解析
    #2

发表回复

登录后回复