66 lines
3.7 KiB
PHP
66 lines
3.7 KiB
PHP
<?php
|
|||
|
|
/**
|
||
|
|
* 首页卡片 · 通知消息(v71c 用户 2026-10-21 从 templates/home.php 搬进来)。
|
||
|
|
*
|
||
|
|
* 用户原话:「先把 web 端的首页修一下,通知消息这个,也是首页的卡片,可以调整顺序
|
||
|
|
* 和大小。另外,这个样式也不好看,我看个人头像点击后,通知消息那个页面的
|
||
|
|
* 样式就不错,直接复用就可以了。」
|
||
|
|
*
|
||
|
|
* ⇒ 两件事一起做了:
|
||
|
|
* ① **卡片化**:不再是网格外那块写死区块,位置/宽高都由 `home_cards` 决定;
|
||
|
|
* ② **样式复用**:结构与 `templates/notifications/index.php` **一模一样** ——
|
||
|
|
* 头像在最前、正文在中间、kind 图标在右(带 `ntf-kind-{kind}` 修饰)。
|
||
|
|
* 旧版首页那块是"图标在最前、头像在第二位",正是用户说"不好看"的那一版。
|
||
|
|
*
|
||
|
|
* ⚠️ 三处与通知页**故意不同**(都是"卡片比整页小"带来的):
|
||
|
|
* · 不带每条右侧的「删除」按钮 —— 4 宽 × 4 高的卡片里塞两个按钮,正文会被挤成
|
||
|
|
* 两三个字(用户抱怨的正是"不好看")。删除在通知页做,卡片右上角有「全部通知」。
|
||
|
|
* · 标题不加旧首页那块用的 `ntf-list` home 修饰类 —— 那一类会把行距压到 6px,
|
||
|
|
* 是给"网格外那条细长清单"用的;卡片里沿用通知页的行距,才叫"样式直接复用"。
|
||
|
|
* · 正文允许折两行(`.hc-ntf` 作用域,见 app.css):卡片宽度可能只有 2 格,
|
||
|
|
* 单行省略会把「有人把你加进了观影「…」」全吃掉,只剩一个名字。
|
||
|
|
*
|
||
|
|
* ⚠️ 没有通知时**整张卡片都不渲染**(返回空串是做不到的 —— 卡片外壳由 home.php 拼)。
|
||
|
|
* 这里给一个空提示,与其它卡片(观影/读书/纪念日)的空态同一套写法。
|
||
|
|
* 真正"不想要它"的人,去「首页卡片」里把它关掉(那张卡片会从网格里消失)。
|
||
|
|
*
|
||
|
|
* @var array $cardData['notif'] ['rows' => 通知行(最新在前), 'unread' => 未读数]
|
||
|
|
*/
|
||
|
|
$ntfRows = (array)($cardData['notif']['rows'] ?? []);
|
||
|
|
$ntfUnread = (int)($cardData['notif']['unread'] ?? 0);
|
||
|
|
?>
|
||
|
|
<div class="hc-body">
|
||
|
|
<?php if (!$ntfRows): ?>
|
||
|
|
<p class="empty-hint">还没有通知。别人在观影、旅程里把你加进去时,这里就会有消息。</p>
|
||
|
|
<?php else: ?>
|
||
|
|
<?php if ($ntfUnread > 0): ?>
|
||
|
|
<p class="hc-ntf-note"><?= (int)$ntfUnread ?> 条未读</p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<ul class="ntf-list hc-ntf">
|
||
|
|
<?php foreach ($ntfRows as $n): ?>
|
||
|
|
<?php
|
||
|
|
// 谁发起的:优先用"我叫他什么"(与全站称呼口径一致)
|
||
|
|
$ntfActor = \App\Nickname::display(
|
||
|
|
(int)$meId,
|
||
|
|
['name' => $n['actor_name'] ?? '', 'my_nickname' => $n['actor_nick'] ?? '']
|
||
|
|
);
|
||
|
|
if (trim((string)$ntfActor) === '') { $ntfActor = '有人'; }
|
||
|
|
$ntfKind = (string)($n['kind'] ?? '');
|
||
|
|
?>
|
||
|
|
<li class="ntf-row ntf-row-<?= e($ntfKind) ?><?= empty($n['is_read']) ? ' is-unread' : '' ?>">
|
||
|
|
<img class="ntf-av" src="<?= e(avatar_url($n['actor_avatar'] ?? null)) ?>" alt="">
|
||
|
|
<a class="ntf-main" href="<?= e(\App\Notification::href($n)) ?>">
|
||
|
|
<span class="ntf-title">
|
||
|
|
<b><?= e((string)$ntfActor) ?></b>
|
||
|
|
<?= e(\App\Notification::bodyWithoutActor((string)$n['title'])) ?>
|
||
|
|
</span>
|
||
|
|
<span class="ntf-time"><?= e(fb_time_ago((string)$n['created_at'])) ?></span>
|
||
|
|
</a>
|
||
|
|
<span class="ntf-kind ntf-kind-<?= e($ntfKind) ?>" aria-hidden="true">
|
||
|
|
<?= \App\Notification::icon($ntfKind) ?>
|
||
|
|
</span>
|
||
|
|
</li>
|
||
|
|
<?php endforeach; ?>
|
||
|
|
</ul>
|
||
|
|
<?php endif; ?>
|
||
|
|
</div>
|