Files
myblog/archive.php
2026-09-09 19:30:18 +08:00

48 lines
2.4 KiB
PHP

<?php
require_once __DIR__ . "/includes/config.php";
require_once __DIR__ . "/includes/functions.php";
$pageName = "archive";
$pageTitle = "归档";
record_visit("archive");
$ym = isset($_GET["ym"]) ? trim($_GET["ym"]) : "";
$archives = get_archives();
$perPage = 10;
if ($ym) {
$st = db()->prepare("SELECT COUNT(*) c FROM articles WHERE status=? AND DATE_FORMAT(created_at,'%Y年%m月')=?");
$st->execute(["published",$ym]);
} else {
$st = db()->query("SELECT COUNT(*) c FROM articles WHERE status='published'");
}
$pg = paginate((int)$st->fetch()["c"], isset($_GET["page"])?(int)$_GET["page"]:1, $perPage);
$sql = "SELECT a.*, c.name cat_name FROM articles a LEFT JOIN categories c ON a.category_id=c.id WHERE a.status=? ";
$params = ["published"];
if ($ym) { $sql .= "AND DATE_FORMAT(a.created_at,'%Y年%m月')=? "; $params[] = $ym; }
$sql .= "ORDER BY a.created_at DESC LIMIT ? OFFSET ?";
$stmt = db()->prepare($sql);
$i = 1;
foreach ($params as $p) { $stmt->bindValue($i++, $p, PDO::PARAM_STR); }
$stmt->bindValue($i++, $pg["perPage"], PDO::PARAM_INT);
$stmt->bindValue($i, $pg["offset"], PDO::PARAM_INT);
$stmt->execute();
$articles = $stmt->fetchAll();
require_once __DIR__ . "/includes/header.php";
?>
<div class="page-head">
<h1>归档</h1>
<div class="desc"><?php echo $ym ? "浏览 " . e($ym) . " 的文章" : "全部文章按月归档"; ?></div>
</div>
<div class="card glass" style="padding:16px;margin-bottom:20px;">
<div class="chip-row">
<?php foreach ($archives as $a) { ?>
<a class="glass-chip<?php echo $ym===$a["ym"]?" active":""; ?>" href="?ym=<?php echo e($a["ym"]); ?>"><?php echo e($a["ym"]); ?> (<?php echo (int)$a["cnt"]; ?>)</a>
<?php } ?>
</div>
</div>
<?php foreach ($articles as $a) { ?>
<article class="card glass clickable" onclick="location.href='<?php echo e(SITE_URL); ?>article.php?id=<?php echo (int)$a["id"]; ?>'">
<div class="card-meta"><span><?php echo e(substr($a["created_at"],0,10)); ?></span><span><?php echo (int)$a["views"]; ?> 次阅读</span></div>
<h2><?php echo e($a["title"]); ?></h2>
</article>
<?php } ?>
<?php if ($pg["pages"]>1) { ?><div class="pagination"><?php for($i=1;$i<=$pg["pages"];$i++){ ?><a class="page-btn<?php echo $i===$pg["page"]?" active":""; ?>" href="?ym=<?php echo e($ym); ?>&page=<?php echo $i; ?>"><?php echo $i; ?></a><?php } ?></div><?php } ?>
<?php require_once __DIR__ . "/includes/footer.php"; ?>