Files
FamilyBook/templates/home/_card_contacts.php
T
laoyang 9a66068c33 v62:纪念日列表修正 / 分类图标与设置菜单 / 首页卡片体系
- 纪念日列表:display:flex 从 td 移到内层 div(写在 td 上会破坏表格列算法,
  表现为关联人列与其它列高度不一致);行内列序按表头对齐;
  改完再点「新建」不再带出上次修改的数据;文案改为「与我相关」「来自名册」;
  别人记的、把我挂成关联人的条目一并显示(split() 返回 hiddenIds,
  路由层据此过滤「接下来的日子」,与两张表同一套可见性)
- 分类图标:新增 app/AnnivIcon.php(17 个行内 SVG 图标 + 同 key 的 emoji
  供日历纯文本处使用,内网无 CDN 不用 FontAwesome);去掉「看日历」按钮;
  设置按钮改为菜单,第一项进 days/settings 独立页;分类可自选图标,
  列表徽标与日历条目都按分类显示
- 首页卡片:新增 app/HomeCards.php 与 templates/home_cards.php;
  8 格宽 × 高 2/4/6/8;首页拆成 templates/home/_card_*.php 共 8 个片段;
  home/cards 可改尺寸、调顺序、开关
2026-10-19 12:51:17 +08:00

44 lines
2.0 KiB
PHP

<?php
/**
* 首页卡片 · 联系人(v62 新增)。
*
* 用户原话:「例如,联系人,可以有卡片,让用户选择显示几个联系人在首页上。」
* ⇒ 张数由卡片设置里的「显示 N 个」决定(`HomeCards::contactsData($familyId,$me,$n)`);
* 卡片高度不够时内部滚动 —— 不留一个"被截断但看不出来"的列表。
*
* ⚠️ 只列**我的名册**里的人(含别人分享给我的),不是全家所有人 —— 首页是"我的"。
*
* @var array $cardData['contacts'] ['rows'=>array,'total'=>int]
*/
$ctRows = (array)($cardData['contacts']['rows'] ?? []);
$ctTotal = (int)($cardData['contacts']['total'] ?? 0);
?>
<div class="hc-body">
<?php if (!$ctRows): ?>
<p class="empty-hint">名册里还没有人。</p>
<?php else: ?>
<div class="hc-people">
<?php foreach ($ctRows as $p): ?>
<?php /* 头像 + 称呼(`person_chip` 自带底色与"我该怎么叫他")。
⚠️ 这里用块级排列而不是一行一个 pill:卡片可能很窄(宽 2),
pill 会挤成一列文字。 */ ?>
<a class="hc-person" href="<?= e(url('people/show', ['id' => (int)$p['id']])) ?>"
title="<?= e(person_name($p)) ?>">
<?php if (!empty($p['avatar'])): ?>
<img class="hc-person-av" src="<?= e(media_url((string)$p['avatar'])) ?>" alt="">
<?php else: ?>
<span class="hc-person-av hc-person-tx"
style="background: <?= e(person_bg($p)) ?>; color: <?= e(person_fg($p)) ?>;">
<?= e(mb_substr(person_name($p), 0, 1, 'UTF-8')) ?>
</span>
<?php endif; ?>
<span class="hc-person-nm"><?= e(person_name($p)) ?></span>
</a>
<?php endforeach; ?>
</div>
<?php if ($ctTotal > count($ctRows)): ?>
<p class="small muted" style="margin:8px 0 0">共 <?= $ctTotal ?> 人,这里显示 <?= count($ctRows) ?> 位。</p>
<?php endif; ?>
<?php endif; ?>
</div>