【Hexo插件系列】日志排序插件 hexo-generator-index,实现文章置顶

简介

Hexo默认提供了按发布日期的排序,即hexo-generator-index

源码解读

核心逻辑:

index.js

1
2
3
4
5
6
7
8
var assign = require('object-assign');

hexo.config.index_generator = assign({
per_page: typeof hexo.config.per_page === 'undefined' ? 10 : hexo.config.per_page,
order_by: '-date' // 默认提供了按发布日期的排序
}, hexo.config.index_generator);

hexo.extend.generator.register('index', require('./lib/generator'));

generator.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var pagination = require('hexo-pagination');

module.exports = function(locals) {
var config = this.config;
var posts = locals.posts.sort(config.index_generator.order_by); // 默认 sort by date
var paginationDir = config.pagination_dir || 'page';
var path = config.index_generator.path || '';

return pagination(path, posts, {
perPage: config.index_generator.per_page,
layout: ['index', 'archive'],
format: paginationDir + '/%d/',
data: {
__index: true
}
});
};

Hexo文章置顶的方案

被pass的方案 - 加top属性

相关 issue

这里提议在文件头加top属性,比如以下配置,就可以把当前的日志排到第一位。

1
2
3
4
5
---
title: XXX
date:
top: 1
---

然而,这两个PR并未被merge。原因很简单,自带的date排序能够实现日志置顶或者置底操作。

通过date置顶

比如

1
date: 2020-01-01

这样就很容易置顶

Hexo文章置底也是同样的道理,比如设置日期为2000年,或者1000年来实现文章置底。

总结

当然,有些需求是想实现置顶,又不想更改date。因此某些主题merge了这个feature,也有某些插件单独实现文章置顶功能。