发布于 

【hexo专栏】hexo的归档功能

目前博客采用hexo搭建,虽说hexo有一些使用上的痛点,但是还是挺喜欢的。这篇文章记录一下,hexo的归档功能。

一、什么是归档

博客的归档指的是按照时间顺序排列归纳博客文章的列表,以便读者可以方便地查找和浏览博客历史文章。通常情况下,博客的归档页面会按照年份、月份或者季度等方式对文章进行分组,显示每个分组中的文章列表和发布时间。

博客归档是博客网站中比较常见的一个功能,也是一个非常有用的功能。通过博客归档,读者可以方便地找到自己感兴趣的文章,快速浏览博客历史内容,了解博主的写作风格和思考方式,增加读者的粘性和忠诚度。

在使用 Hexo 进行博客建设时,可以通过安装相应的插件来生成博客归档页面,例如 hexo-generator-archive 插件可以方便地生成按年份、月份等方式归档的页面。同时,也可以根据自己的需求自定义博客归档页面的模板和样式,提供更好的用户体验。

二、hexo是如何实现归档的

第一章节,我们已经讲了hexo 是通过 hexo-generator-archive 插件实现的。

2.1 如何进行配置

安装 Hexo-generator-archive 插件后,需要在 Hexo 的配置文件 _config.yml 中配置相关参数,例如:

1
2
3
4
5
archive_generator:
per_page: 10
yearly: true
monthly: true
daily: false

上述配置表示生成归档页面时,每页显示 10 篇文章,同时按年份和月份分别生成归档页面。这也是这个插件的默认配置

2.2 hexo-generator-archive的实现原理

Hexo-generator-archive 插件的实现原理相对简单。在 Hexo 中,插件是通过 Node.js 模块的形式实现的,插件本质上就是一个 Node.js 模块,通过在 Hexo 的配置文件中配置相应的参数来控制插件的行为。

Hexo-generator-archive 插件中,主要是通过解析博客文章的元数据(Front-matter)来获取文章的发布时间、分类、标签等信息,然后根据用户在配置文件中指定的归档方式(按年份、月份、分类、标签等)对文章进行分组,生成对应的归档页面。

具体来说,Hexo-generator-archive 插件主要有以下几个步骤:

  1. 获取博客文章的元数据信息,包括发布时间、分类、标签等信息。
  2. 根据用户在配置文件中指定的归档方式(如按年份、月份、分类、标签等)对文章进行分组,生成对应的归档页面。
  3. 在归档页面中列出相应的文章标题、发布时间等信息,以及链接到文章的详情页面。
  4. 将生成的归档页面保存到 Hexopublic 目录中,以便在生成静态网站时一并生成。

需要注意的是,Hexo-generator-archive 插件是通过模板引擎来生成归档页面的,因此用户可以自定义归档页面的模板和样式,以满足自己的需求。同时,插件也提供了一些默认的模板和样式供用户参考。

2.3 关于模板

它会通过读取模板 archive,如果没有就找 index 进行渲染。

在归档页面的模板中,可以使用 EJS 模板引擎语法来引用变量、控制流程等。具体来说,可以使用以下变量:

  • page.archive:表示当前归档页面的信息,包括归档方式、归档标题、归档页面的 URL 等。
  • page.posts:表示当前归档页面所包含的文章列表,包括文章的标题、发布时间、摘要、链接等。
  • site.data.categories:表示博客的分类列表,可以在归档页面中引用。
  • site.data.tags:表示博客的标签列表,可以在归档页面中引用。

下面是一个示例的归档页面模板代码,以按年份归档为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
---
layout: archive
title: <%= page.archive.title %>
archive_type: <%= page.archive.type %>
---
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<% page.posts.forEach(function(post){ %>
<article>
<h3><a href="<%= post.permalink %>"><%= post.title %></a></h3>
<time datetime="<%= post.date.toISOString() %>"><%= post.date.format('YYYY-MM-DD') %></time>
<p><%= post.excerpt %></p>
</article>
<% }); %>
</body>
</html>

在上面的代码中,我们首先使用 YAML 格式定义了归档页面的元数据,包括布局、标题和归档方式等信息。然后,在模板中使用 EJS 语法遍历文章列表,依次输出每篇文章的标题、发布时间和摘要等信息。需要注意的是,我们可以使用 Moment.js 库来格式化日期,使用 post.permalink 变量来获取文章详情页的链接。

2.4 生成结果查询

Hexo-generator-archive 生成的归档页面默认存放在 public 目录下,可以通过访问相应的 URL 来查看生成的结果。但我们可以通过配置,让其存放在另外的目录。

此处涉及配置:

1
2
archive_dir: 'archives'
pagination_dir: 'page'

archive_dir 代表public 下面存放在哪个位置,而 pagination_dir 表示分页的格式,比如第二页,就是/archives/page/2/

最后,我们可以通过npm run build 也就是 hexo g 查看生成结果,如果我们配置了 archive_dir 是 ‘archives’, 那么归档的目录: public/archives

需要注意的是,如果你使用的是本地服务器预览,那么在生成归档页面之后,需要重新启动服务器才能看到生成的结果。如果你使用的是线上服务器,那么生成的归档页面会被自动部署到服务器上,无需额外操作即可查看。

2.5 为什么本地服务器模式需要重新启动

在本地预览 Hexo 生成的归档页面时,需要重新启动 Hexo 服务器才能看到生成结果的原因是:

Hexo-generator-archive 是一款 Hexo 插件,它的作用是生成归档页面。在生成归档页面时,需要读取博客的所有文章,并按照指定的格式进行分类、排序等操作,然后才能生成归档页面。而在 Hexo 本地预览的过程中,Hexo 服务器只会在启动时生成一次归档页面,之后就不会再次生成了,也不会自动检测到新添加的文章。

三、小结

总之,Hexo-generator-archive 是一个很实用的插件,可以方便地生成博客的归档页面,提供了更好的浏览和查找博客文章的方式。

四、Hexo专栏

目前 Hexo 系列形成了一个小专栏,欢迎读者继续阅读: Hexo专栏地址


如果你有什么意见和建议,可以点击: 反馈地址 进行反馈。