归档页面调整

今天调整了 归档页面,正常归档页面 archive 都是每页显示 固定数量的文章,这样的话每个页面可能会包含的多个年份的文章,或者一个年份的文章分布在不同页面。

因为我的博客是个人博客,而且从2008年开始,几乎每年都会写文章,如果archive 页面不管一年有多少文章,按年份显示,这样更方便查阅自己的过去。

实现原理总结

目标 将归档页面从「每页显示 N 篇文章」改为「每页显示一整年的所有文章」,即 page=1 对应最近一年,page=2 对应次近一年,以此类推。 关键改动

  1. 数据获取方式不变,但处理逻辑重写 之前是:取全部文章 → 按文章数量分页(每页 20 篇)→ 循环输出,遇到不同年份就插一个年份标题。 现在是:取全部文章 → 按年份分组存入数组 → 年份去重并倒序排列 → page=N 映射到第 N 个年份 → 输出该年的所有文章。
  2. 核心数据结构

// 两层结构:年份 → 该年的文章列表

$postsByYear['2026'] = [
    ['permalink' => '...', 'title' => '文章名', 'created' => 1234567890],
      ...
  ];
  $postsByYear['2025'] = [
      ...
  ];

// 独立的年份数组(去重+按从新到旧排序)

$yearOrder = ['2026', '2025', '2024', ...];
  1. 年份映射公式 ┌────────┬──────────────────────────┐ │ 页码 │ 对应年份 │ ├────────┼──────────────────────────┤ │ page=1 │ $yearOrder[0] → 最新年份 │ ├────────┼──────────────────────────┤ │ page=2 │ $yearOrder[1] → 次新年份 │ ├────────┼──────────────────────────┤ │ page=N │ $yearOrder[N-1] │ └────────┴──────────────────────────┘ 这样每一页就是完整的一年,年份数量就是总页数。

Last modified on 2026-07-11

评论

发表评论