` 在部分旧 WebView 上行为不一致,
而且我们已有的浮层已经解决了"点遮罩关、Esc 关、滚动锁"这几件事。
⚠️ 表单本身**一个字没动**(字段名/服务端契约/CSRF 全照旧),
只把它的容器从"页面上的一格"换成"浮层里的一块"。
`calendar_id` 那个 select 也保留(第 7 条要求"选择日历本,带上颜色",
见下面给每个 option 加的色块)。 */ ?>
日历本`
/ `$evMvStyle = true` —— 现在这些串在新片段里。
不改的话:正向断言当场中止部署,负向断言恒真没牙齿(v78 原话)。 */
?>
$ym, 'view' => $view, 'anchor' => $anchor,
'new_at' => $newAt,
// 模块页只管自己:'' = 提交完回日程模块(不写 'home')
'back' => '',
];
require __DIR__ . '/_add_modal.php';
/* 🔴🔴 v82:**只清掉三个"调用参数"**,别的什么都不许 unset。
为什么:`require` 与宿主**同一作用域**,片段里赋的每个变量都会留下来。
我第一版顺手把 `$ym/$view/$anchor/$newAt/$writable` 也 unset 了 ——
而这五个正是**模块页自己后文还要用的**(页头标题、翻页链接、周/日网格、
`.tg-now` 的 top 计算全依赖它们)。unset 掉不会报错,只会让后半页
静默变成空值:页头显示"1970 年"、翻页链接丢参数、时间网格画不出来。
这类"清了别人的变量"比"片段拿不到变量"更难查 —— 页面能开,只是全错。
⇒ 判据:unset 之前先 grep 一下后文还用不用它(本项目吃过"片段覆盖宿主变量"的亏)。
🔴 v82 再修(同日):片段内部现在已经**改用 `$cal*` 前缀**,不再覆盖
宿主的 `$anchor/$newAt/$writable/$view/$ym`(见该片段头部那段说明)。
所以这里连"片段残留物"都不必再清 —— 真正要清的只有本模板自己传进去的
三个 `$cal*` 入参。 */
unset($calCanNew, $calWritable, $calCtx);
?>
= e(['日','一','二','三','四','五','六'][$c['w']]) ?>
= (int)$c['day'] ?>
= sprintf('%02d', $h) ?>
$c): ?>
` 而不是把 JSON 塞进 data-*:
data-* 属性里几千条会被 HTML 转义得又长又容易截断;
JSON 里若出现 `` 也会截断 —— 所以下面统一走 json_encode 的
JSON_HEX_TAG(把 < > 转成 \u003C \u003E,永远不会提前闭合)。
⚠️ 这是**渲染层**的便利数据,字段与 `data-fb-entry` 同一套(fb_entry_json),
所以浮层能沿用全部既有逻辑(详情/编辑/删除/来源判断)。 */
$dayData = [];
foreach (($weeks ?? []) as $wk) {
foreach ($wk as $cell) {
if (!$cell['events']) {
continue;
}
$items = [];
foreach ($cell['events'] as $ev) {
$evKind = (string)($ev['kind'] ?? 'custom');
$evRef = (int)($ev['ref_id'] ?? 0);
$evEdit = '';
if ($evKind === 'custom' && $evRef > 0) { $evEdit = url('calendar/event', ['id' => $evRef, 'embed' => 1]); }
elseif ($evKind === 'movie' && $evRef > 0) { $evEdit = url('movies/edit', ['id' => $evRef, 'embed' => 1]); }
elseif ($evKind === 'task' && $evRef > 0) { $evEdit = url('tasks/edit', ['id' => $evRef]); }
elseif ($evKind === 'anniv' && $evRef > 0) { $evEdit = url('days/edit', ['id' => $evRef, 'embed' => 1]); }
$items[] = ['_rank' => \App\Calendar::displayRank($ev),
'_time' => (string)($ev['time'] ?? '')]
+ json_decode(
fb_entry_json($ev, (string)($ev['href'] ?? ''), $evEdit),
true
);
}
$dayData[(string)$cell['date']] = $items;
}
}
?>