48 lines
1.9 KiB
PHP
48 lines
1.9 KiB
PHP
<?php
|
||||
|
|
/**
|
|||
|
|
* 首页卡片 · 读书(v62 新增)。
|
|||
|
|
*
|
|||
|
|
* 数据来自 `HomeCards::booksData()`:**在读优先**,其余按新加进来的顺序排(最多 6 本)。
|
|||
|
|
*
|
|||
|
|
* @var array $cardData['books'] 每项含 id/title/author/status/progress/chapter_count/cover_key
|
|||
|
|
*/
|
|||
|
|
$bkRows = (array)($cardData['books'] ?? []);
|
|||
|
|
?>
|
|||
|
|
<div class="hc-body">
|
|||
|
|
<?php if (!$bkRows): ?>
|
|||
|
|
<p class="empty-hint">书架还是空的。</p>
|
|||
|
|
<?php else: ?>
|
|||
|
|
<ul class="hc-bk-list">
|
|||
|
|
<?php foreach ($bkRows as $b): ?>
|
|||
|
|
<?php
|
|||
|
|
$bkStatus = \App\Book::normalizeStatus((string)($b['status'] ?? 'wish'));
|
|||
|
|
$bkCh = (int)($b['chapter_count'] ?? 0);
|
|||
|
|
$bkPr = (int)($b['progress'] ?? 0);
|
|||
|
|
$bkPct = $bkCh > 0 ? min(100, (int)round($bkPr / $bkCh * 100)) : 0;
|
|||
|
|
?>
|
|||
|
|
<li class="hc-bk">
|
|||
|
|
<a class="hc-bk-cover" href="<?= e(url('books/show', ['id' => (int)$b['id']])) ?>">
|
|||
|
|
<?php if (!empty($b['cover_key'])): ?>
|
|||
|
|
<img src="<?= e(media_url((string)$b['cover_key'])) ?>" alt="" loading="lazy">
|
|||
|
|
<?php else: ?>
|
|||
|
|
<span class="hc-bk-ph" aria-hidden="true">📖</span>
|
|||
|
|
<?php endif; ?>
|
|||
|
|
</a>
|
|||
|
|
<div class="hc-bk-main">
|
|||
|
|
<a class="hc-bk-t" href="<?= e(url('books/show', ['id' => (int)$b['id']])) ?>"
|
|||
|
|
title="<?= e((string)$b['title']) ?>"><?= e((string)$b['title']) ?></a>
|
|||
|
|
<span class="small muted">
|
|||
|
|
<?= e((string)($b['author'] ?? '')) ?>
|
|||
|
|
<?php if ($bkCh > 0): ?>
|
|||
|
|
· <?= $bkPr ?>/<?= $bkCh ?> 章
|
|||
|
|
<?php endif; ?>
|
|||
|
|
</span>
|
|||
|
|
<span class="hc-bk-bar" aria-hidden="true"><i style="width: <?= (int)$bkPct ?>%"></i></span>
|
|||
|
|
</div>
|
|||
|
|
<span class="hc-bk-st is-<?= e($bkStatus) ?>"><?= e(\App\Book::statusWord($bkStatus)) ?></span>
|
|||
|
|
</li>
|
|||
|
|
<?php endforeach; ?>
|
|||
|
|
</ul>
|
|||
|
|
<?php endif; ?>
|
|||
|
|
</div>
|