• cxk123
    发帖模板
    ID post_template版本 1.0.0插件制作者 cxk123售价 30 积分2395 行 / 129.5 KBHook / 路由 / 后台页
    把「发帖只能写标题 + 正文」变成**结构化发帖**:版主为版块定义一组带类型的字段
    收费插件安装说明购买后点击“授权码”获取一次性授权码;在后台 > 插件广场点击在线安装或更新,并填写该授权码。已购买用户更新免费:每次在线安装或更新前,重新点击“授权码”获取新的一次性授权码即可,无需再次购买;也可直接下载新版后用后台“插件上传”更新。尊重并感谢他人劳动,请勿传播代码。
    app/plugins/post_template/plugin.php
    开发日志已有 1 条

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

    • cxk123
      cxk123
      版本 1.0.0 0653c32dce16 更新:首次上架(1.0.0)。 市场里 发帖模板 / 结构化发帖 / 结构化 / 帖子模板 / 主题模板 / 表单模板 / 自定义字段 / 模板字段 / 表单构建 / topic_template / post_template / custom_field / form_builder / 模板化 / 字段 这一族词 此前**双源 0 命中**(全目录 392 条 + 站点两视图 431 条,按 idrelease
    主楼
  • cxk123

    版本 1.0.0 更新:
    首次上架(1.0.0)。

    市场里 发帖模板 / 结构化发帖 / 结构化 / 帖子模板 / 主题模板 / 表单模板 / 自定义字段 / 模板字段 /
    表单构建 / topic_template / post_template / custom_field / form_builder / 模板化 / 字段 这一族词
    此前双源 0 命中(全目录 392 条 + 站点两视图 431 条,按 id、按 6 个中文名、按全文三种查法);
    核心侧也没有承载能力:app_topics 只有 title + body(Setup.php:142),没有任何地方挂结构化值。
    于是版块的「必须填的信息」只能写在帖子正文里靠自觉:租房帖少了租金、活动帖少了时间、招聘帖少了岗位,
    读者要读完整段才知道;版主想按「地铁 / 成色 / 预算」筛帖,只能靠人肉翻。
    这一款补的是这件事:**版主为版块定义带类型的字段 → 发帖时勾模板按字段填 → 主题页顶部生成只读信息卡 →
    读者能按字段值找帖。它不改帖子正文、不发积分、不做审核、不碰附件**。

    • 版主定义字段(后台 tab):一个版块可以有多个模板,每个模板一组字段,六种类型 —— 单行文本 /

    多行文本 / 单选 / 多选 / 数字 / 链接;每个字段单独设「必填」与「档位」(公开 / 仅作者与团队可见),
    还有选项清单与长度上限。模板三种状态(草稿 / 已发布 / 已归档)与两档可见性(公开模板 / 内部模板)
    都走产品路径的 CAS 状态机(UPDATE … WHERE id=? AND status=? + rowCount()===1),
    两个会话同时发布同一个模板只有一个成功。

    • 发帖时按模板填:发帖表单里多一个「结构化发帖」区块(核心 topic.form_extra):勾一个模板、

    按字段填。校验全在服务端(必填 / 选项合法性 / 数字格式 / 链接协议 / 超长拒绝而不是悄悄截断),
    不过就 err() 直接中止 —— 零落库,不会出现「先发出去再补」。
    零前端脚本:assets 只有一段 CSS,控件全是原生 radio / checkbox / select / textarea。

    • 主题页顶部的只读信息卡:发帖时填的值在主题页标题下方成卡展示(模板名 + 字段集版本 + 逐行标签值,

    链接类字段渲染成 rel="nofollow noopener" 的外链)。topic.after_view 预载 1 条、
    topic.template 渲染期零查库 —— 楼层数从 8 涨到 16,主题页自有语句恒为 1。

    • 快照冻结,历史帖子不会被后来改的模板篡改:字段的标签 / 类型 / 选项 / 长度 / 值一起冻结进

    data_json,模板后来改名、删字段、连整行模板都删掉,已经发出去的帖子卡片逐字不变;
    模板行不存在时列表与台账给「原主题已删除 / 模板已删除」占位块,不 404 也不破版。

    • 隐私是构造性的,不是查询期过滤:检索引擎用的 search_text 只由公开档字段的值拼成 ——

    敏感字段的值根本不进索引,所以连作者本人都搜不到自己的敏感值(宁可搜不到,不可搜得到);
    卡片 / 详情 / 检索三个面共用同一对可见性函数(一条 SQL 谓词 + 一条 PHP 判据),不会随页面漂移。
    默认档位是最严的那一档:新建字段默认「仅作者与团队可见」,新建模板默认「内部模板」。

    • 每人每天用模板发帖有上限(可关):配额用 UPDATE … SET used=used+1 WHERE user_id=? AND used<?

    抢占(并发下只放行一条);主题被删除时在核心的删除事务里清行并归还名额;计划任务按「当天实际落库的
    填单数」精确重建(DELETE + INSERT … SELECT … GROUP BY 两条语句,兜住预留后落库被拒的保守泄漏)。

    • 悬空引用不崩页:主题被绕过产品路径删掉之后留下的填单,团队面显示占位块,并由计划任务按保留期清理

    (后台另有「立即清理悬空填单」按钮);任务先写认领令牌批量认领、再按令牌回读,循环体内零查库。

    • 自有表、零核心写入:五张 plugin_post_template_* 表(templates / fields / fills / events / quota)+

    八枚具名索引 + 三个唯一键((forum_id,tkey) / (template_id,fkey) / fills.topic_id);
    对 app_* 只有 SELECT;app.boot 只比一个结构版本戳(0 条 SQL)就能幂等自愈建表补列;
    卸载把表、索引、结构戳一起清干净。

    • 三驱动可移植:无窗口函数、无 db_driver() 分支、不手写 ON CONFLICT / INSERT IGNORE

    (幂等写入走核心 app_db_insert_ignore())、时间一律 unix 秒整数、建删表索引只走 app_db_*。

    • 页面级无 N+1:首页增量 0(启用 = 停用,差值实测 0);发帖表单 ≤4 条;主题页恒 1 条;

    模板库 4 条、按字段找帖 4 条、我的 4 条、填单详情 3 条、后台台账 8 条 —— 行数翻倍后语句数不变。

    本版为 v1.0.0 首次上架:验收套件 508 项通过 / 0 项失败(九节:私有副本引导 / 结构与七道门禁 /
    写入与校验 / 快照冻结 / 权限矩阵 4 身份 × 3 状态 × 3 面 / 隐私三面同源 / 并发 / 查询预算 / 卸载重装自愈),
    七道静态门禁 0 违规 / 0 待人工确认,全仓 suite_integrity_audit 全 ✓。

    #1
  • 质量报告

    插件质量报告

    插件:post_template

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    app.boot全站请求启动否5---写 plugin_post_template_quota, plugin_post_template_fills, plugin_post_template_templates, plugin_post_template_fields, plugin_post_template_events
    sidebar.feature_links首页/侧栏快捷功能否5----
    topic.after_view主题查看页完成加载否4---读 plugin_post_template_fills
    user.menu_links个人卡片/移动端我的菜单(展示位置:个人卡片)否4----
    topic.after_save主题保存后否3---写 plugin_post_template_fills, plugin_post_template_events
    topic.before_save主题发布/编辑表单提交否3---写 plugin_post_template_quota;读 plugin_post_template_templates, plugin_post_template_fields, plugin_post_template_fills
    topic.before_delete主题删除操作否2---写 plugin_post_template_events, plugin_post_template_fills, plugin_post_template_quota
    topic.form_extra主题发布/编辑表单否2---读 plugin_post_template_templates, plugin_post_template_fields, plugin_post_template_quota, plugin_post_template_fills
    topic.template非系统hook否1----

    颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。

    数据字典

    plugin_post_template_templates

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

    plugin_post_template_fields

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

    plugin_post_template_fills

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

    plugin_post_template_events

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

    plugin_post_template_quota

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

发表回复

登录后回复