` 里。而条目详情浮层点「编辑」时, * 需要**单独取这份表单**(`tasks/edit?embed=1`)—— 不可能去详情页里抠。 * 抽成一份后,详情页与浮层用的是**同一张表单**,不会出现"两处字段不一致"。 * * ⚠️ 字段名 / 服务端契约与原来**一字未改**(tasks/update 收的就是这些)。 * ⚠️ 「状态」不在这里改:状态由专门的 `tasks/status` 路由管(它还要处理循环任务), * 文案里也说明了这一点(与 v24 第 14 批的口径一致)。 * * 🔴🔴 **本片段一律用带前缀的局部变量(`$tk*`),绝不碰入参的名字。** * 第一版写的是 `$t = is_array($t ?? null) ? $t : [];` —— 看似无害,其实是在 * **覆盖宿主模板的 `$t`**(那是"这条任务"本身)。只读一次没问题, * 但下一个人只要把某个 `$tk*` 改回 `$t`(很自然)就会让详情页后半段的 * `$t['children']` / 评论区全是 null —— **而且是静默的**。 * 项目的"片段体检"(`_fb_frag_guard`)当场抓到了这处裸赋值,是对的。 * ⇒ 入参先**收进 `$tkT`**,后面全用它。 * * 用法(include 前设好): * $t 任务(Task::find 的形状) * $people 名册 * $parents 可选父任务候选 * $categories / $boards 分类与看板 * $tkEditEmbed 是否"浮层形态"(true = 不输出自己的「保存」,由浮层底栏给) * $tkEditModal 🔴 v55:是否**套 `.cal-modal` 弹框壳**(用户 2026-10-17 第 3 条 * 「编辑任务,弹框处理」)。详情页传 true;条目浮层 / AJAX 片段不传 * (它自己已经在浮层里,再套一层弹框就是"框中框")。 * $tkEditOpen 弹框初始是否打开(默认 **关闭** —— 详情页要点「编辑」才开)。 * $tkEditTitle 弹框标题(默认「编辑任务」) */ $tkT = is_array($t ?? null) ? $t : []; $tkPeople = (array)($people ?? []); $tkParents = (array)($parents ?? []); $tkCats = (array)($categories ?? []); $tkBoards = (array)($boards ?? []); $tkModal = !empty($tkEditModal); $tkOpen = !empty($tkEditOpen); $tkMdlTitle = (string)($tkEditTitle ?? '编辑任务'); $tkEmbed = !empty($tkEditEmbed); ?>