' . e($k) . ''; }; $srcWord = static function (array $r): string { $src = (string)($r['source'] ?? 'custom'); if ($src === 'birthday_solar') { return '名册生日(阳历)'; } if ($src === 'birthday_lunar') { return '名册生日(农历)'; } return \App\Anniversary::repeatWord((string)($r['repeat_type'] ?? 'solar')); }; /* 关联人(用户第 2 条:「再加一列,关联人。列表中,人的前面,都加头像。」) —— 用全站统一的 person_chip()(它自带头像 + 我对他/她的称呼 + 本人底色)。 ⚠️ chips 一律**不传 href**:这一格在一张表格里,`` 套 `` 是非法 HTML, 浏览器会把外层结构切开(person_chip 的注释里记过这个坑)。 ⚠️ $peopleMap 由路由层传进来(一次查全,避免逐行查库);缺失时退化成"有几个显示几个"。 */ $peopleMap = $peopleMap ?? []; $peopleCell = static function (array $r) use ($peopleMap): string { $ids = (array)($r['person_ids'] ?? []); if (!$ids) { return '—'; } $out = ''; $n = 0; foreach ($ids as $pid) { $pid = (int)$pid; $p = $peopleMap[$pid] ?? null; if ($p === null) { continue; } // 一个人时正常画;多人时最多画 4 个 + 「+N」,免得一行被撑爆 if ($n >= 4) { $rest = count($ids) - 4; $out .= '+' . $rest . ''; break; } $out .= person_chip($p); $n++; } return $out === '' ? '—' : $out; }; /* 画一张纪念日表。两块(手动 / 派生)共用同一个渲染 —— 复制一遍迟早改漏一处。 */ $renderTable = function (array $rows, bool $editable) use ($canWrite, $kindBadge, $srcWord, $peopleCell): void { if (!$rows) { return; } ?>
日期纪念日关联人分类重复
月 日 (闰月) 年起 第 个 修改
来自名册

纪念日

生日本身就是一种纪念日 · 阳历与农历都能记
看日历

接下来的日子

未来 60 天里没有纪念日。

我自己添加的() 只有这些能改能删

还没有自己添加的纪念日。 结婚纪念日、忌日、相识的日子…点右上角「新建纪念日」加一条。

来自名册的() 实时读出来的,改生日这里跟着变

名册里还没有人填过生日。到「名册 → 编辑成员」把生日填上,这里就会自动出现。

这一块是**实时派生**的 —— 改生日,这里跟着变,不用重复维护。 不需要在这里新建,也没法单独删(删掉生日就等于删了它)。