- 招聘 / 求职ID recruit_board版本 1.0.0插件制作者 cxk123售价 30 积分1957 行 / 115.5 KBHook / 路由 / 后台页把「职位」与「求职者」变成站点里的一等公民:发布(类型 招聘/求职 + 标题 + 类别 + 城市 + 远程 +收费插件安装说明购买后点击“授权码”获取一次性授权码;在后台 > 插件广场点击在线安装或更新,并填写该授权码。已购买用户更新免费:每次在线安装或更新前,重新点击“授权码”获取新的一次性授权码即可,无需再次购买;也可直接下载新版后用后台“插件上传”更新。尊重并感谢他人劳动,请勿传播代码。app/plugins/recruit_board/plugin.php插件预览6 张开发日志已有 1 条
此项目接受所有登录用户协助维护和提交更新。
主楼 版本 1.0.0 更新:
首次上架(1.0.0,插件 id:recruit_board)。关于 id:本插件在本地验收阶段使用的 id 是
job_board,但该 id 已被市场里另一位作者
占用(topic 725 / creator 307,allow_overwrite=false),提交被市场侧拒绝(我方字节未入库、
积分未扣、市场登记逐字未变)。因此本次以未被占用的新 idrecruit_board首次上架:
manifest id、93 个顶层函数前缀、3 张自有表与 5 枚具名索引、CSS 前缀、data 锚点、
三条路由键与后台 tab 键一并改名。除改名外,业务逻辑与验收结论逐字节未变
(改名前后差异由「重放同一改名管道 →cmp逐字节相同」证明)。市场里 招聘 / 求职 / 简历 / 职位 / 应聘 / 投递 / 面试 / 薪资 / 岗位 / 猎头 / 内推 / 实习 / 兼职 此前 全 0 命中,
核心侧也没有任何职位概念:项目侦察把 29 个招聘族关键词打在核心 6 个文件(6822 行)上,合计命中 0
(唯一的假阳性order100 次,逐条看下来全是ORDER BY与border/reply_order,没有一处是「订单」);
25 款自有插件里的招聘族关键词同样全 0。也就是说,站内想招一个人或找一份工作,
除了「发个帖子」没有别的容器 —— 而帖子既没有薪资区间、没有城市与远程与否,
更没有「投递我但别把我的微信公开」这件事。这一款补的就是这条最短闭环:
发布(招聘 / 求职)→ 浏览筛选 → 详情 → 站内投递 / 联系 → 关闭职位,全程只做信息撮合。- 发布:发布类型(招聘 / 求职)/ 标题 / 职位类别 / 工作城市 / 远程(支持远程 · 需到岗)/ 经验要求(不限…10 年以上六档)/
薪资口径(月薪 · 面议 · 日结 / 时薪,月薪可写区间如
8000-12000或8k-12k)/ 描述 / 联系方式 / 可见范围 / 配图,
一张表单一次提交完事。同一时间窗内重复提交靠submit_key唯一键兜底(幂等复用赢家那一行,不产生重复行)。- 浏览与筛选:关键词(标题 / 描述 / 城市)、类型、城市、远程、类别、状态、排序(最新 / 薪资从高到低 / 薪资从低到高)、分页;
列表卡片给出配图(或占位块)、标题、薪资、城市与远程、类型徽标、状态徽标、类别、发布者与发布时间。
- 详情页:配图、标题、薪资、类型与状态徽标、城市 / 远程 / 类别 / 经验 / 可见范围、
发布者与浏览数、「投递 / 联系 TA」按钮、详细描述,以及「同一发布者的其它进行中」。
- 隐私优先(本插件最该被看见的一条):联系方式有两档口径,默认就是最保守的那一档 ——
「仅站内私信」:选它之后联系方式在写入时被强制清空,库里根本没有可泄露的串,
投递 / 联系走「投递 / 联系 TA」→ 系统替你给对方发一条只含职位标题与链接的站内私信
(在役的user_follow私信桥;不可用时才退化为站内通知,且通知正文与私信正文完全一致),双方都不必暴露联系方式。
即使发帖人改选「登录后可见」:游客在列表 / 详情 / 搜索三处都拿不到原文(连脱敏形态都没有,
详情页只给一句「联系方式仅登录用户可见,请先登录」,而且连投递表单都不渲染),
登录用户在列表与搜索里也只看到脱敏形态(保证与原串不相等),只有详情页给全文。
这三处的判定共用同一个函数recruit_board_contact_plaintext_allowed(),不会随页面漂移;私信正文里同样不含联系方式。- 可见性与状态只有一份真源:管理团队全可见 · 作者看得见自己的已下架条目 · 其他登录用户看不到已下架(已关闭仍然可见)·
游客只看公开且未下架的。列表 / 详情 / 搜索 / 我的 / 后台五面由同一对函数(一条 SQL 谓词 + 一条 PHP 判据)给出。
- 状态机与配额都是 CAS:
open / closed / hidden的每次迁移都是
UPDATE … WHERE id=? AND user_id=? AND status=?+rowCount()===1—— 两个人同时关闭同一条职位只有一个成功,
另一个拿到「这条职位已经不在「进行中」状态了,请刷新后重试」,审计里只留下一条迁移记录;
每人「同时进行中条数」额度用独立的配额表 CAS 抢占,只有从open离开才归还名额;
越权操作一律 404 且零写入。- 配图只引用、不接管:配图只能从本人已上传的核心图片附件里选(服务端校验归属,绝不信表单,
选了别人的附件直接判非法而不是静默忽略),不复制文件、不写附件表、不接管上传;封面附件被删掉时渲染占位块而不是破图。
- 后台一个 Tab:全部 / 进行中 / 已关闭 / 已下架统计 + 设置(总开关、允许普通用户发布、侧栏入口、
每人同时进行中上限、列表每页条数、审计保留条数、新建默认联系方式口径、职位类别清单、城市清单)+
职位队列(按状态筛选,含强制下架 / 恢复上架 / 删除)+ 最近审计流。- 自有表、零核心改动:三张
plugin_recruit_board_*表 + 五枚具名索引,不碰任何app_*表
(
app_users/app_attachments只出现在只读JOIN与IN批查里);卸载把表、索引、配置戳一起清干净;
app.boot只比一个结构版本戳(戳匹配时 0 条 SQL)就能自愈重装。- 三驱动可移植:不用窗口函数、不手写
ON CONFLICT/INSERT IGNORE(幂等写入走核心的
app_db_insert_ignore())、时间一律 unix 秒整数、建删表索引只走app_db_*、自增 id 只在一处取。- 页面级无 N+1:列表页 2 条、详情页 3 条、我的发布 5 条、后台 6 条插件语句(都在预算内,
多出来的都是批查,与行数无关);行数翻倍后列表页语句数不增长;首页零额外开销(不挂首页槽位,插件语句恒为 0)。
本版为 v1.0.0 首次上架:验收套件 609 项通过 / 0 项失败,
七道静态门禁 0 违规 / 0 待人工确认,全仓suite_integrity_audit63 个套件七条全 ✓。插件质量报告
插件:
recruit_boardHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 app.boot 全站请求启动 否 5 - - - 写 plugin_recruit_board_quota, plugin_recruit_board_posts, plugin_recruit_board_audit sidebar.feature_links 首页/侧栏快捷功能 否 5 - - - - user.menu_links 个人卡片/移动端我的菜单(展示位置:个人卡片) 否 4 - - - - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_recruit_board_quota字段 类型 可空 默认值 约束 user_id uint 否 - 主键 used uint 否 0 - updated_at uint 否 0 - plugin_recruit_board_posts字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 plugin_recruit_board_audit字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 - dcve昨天
佬,最近发布这么多??厉害