Fisher's Blog

Sein heißt Werden
Leben heißt Lernen

0%

Hexo 置顶功能

使用的 Hexo 静态博客系统没有置顶文章的功能,用的 NexT 主题在文章 front-matter 中加上 sticky: true 属性也只是在文章标题之前加了一个图钉图标,并没有真正的置顶,NexT 开发者在 Issue 中指出置顶功能需要在 Hexo 中实现,所以我们对 Hexo 进行修改。

有两种办法

  1. 修改 node_modules/hexo-generator-index/lib/generator.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
'use strict';

var pagination = require('hexo-pagination');

module.exports = function(locals) {
var config = this.config;
var posts = locals.posts

var order_by = config.index_generator.order_by.slice(1)

posts.data = posts.data.sort(function(a, b) {
if(a.sticky && b.sticky) {
if(a.sticky == b.sticky) return b[order_by] - a[order_by];
else return b.sticky - a.sticky;
}
else if(a.sticky && !b.sticky) {
return -1;
}
else if(!a.sticky && b.sticky) {
return 1;
}
else return b[order_by] - a[order_by];
});

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
}
});
};
  1. 根目录下添加 scripts/sticky.js ,写入:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var pagination = require('hexo-pagination');

hexo.extend.generator.register('sticky', function(locals){
var config = this.config;
var posts = locals.posts.sort(config.index_generator.order_by);

posts.data = posts.data.sort(function (a, b) {
var sticky_a = a.sticky || 0;
var sticky_b = b.sticky || 0;
return sticky_b-sticky_a
});

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置顶问题 这篇博文,但默认只会根据 date 进行排序不会根据 updated 进行排序。