眾所周知,我們可以利用hexo等框架發(fā)布自己的文章,文章發(fā)布后的順序默認(rèn)是按照創(chuàng)建時間排的,但當(dāng)一篇文章更新時其順序依舊按照創(chuàng)建時間,這一點不太符合一般常識,這里我們要使發(fā)布后的文章在博客顯示順序按照更新時間.

這里以hexo的Next主題為例,以下是我的hexo版本信息
$ hexo -v
INFO Validating config
hexo: 5.4.0
hexo-cli: 4.3.0
os: win32 10.0.19045
node: 14.15.5
v8: 8.4.371.19-node.18
uv: 1.40.0
zlib: 1.2.11
brotli: 1.0.9
ares: 1.16.1
modules: 83
nghttp2: 1.41.0
napi: 7
llhttp: 2.1.3
openssl: 1.1.1i
cldr: 37.0
icu: 67.1
tz: 2020a
unicode: 13.0
這里比較重要的參數(shù)有updated_option以及updated.
updated_option
在根目錄下的配置文件_config.yml中有updated_option這個參數(shù)
## updated_option supports 'mtime', 'date', 'empty'
updated_option: 'mtime'
這個參數(shù)設(shè)置的就是當(dāng)updated沒有在Font-matter中配置時,這個值怎么取,按照官方文章有mtime和date以及empty三個值.
主要看前兩個,mtime將文件的修改時間設(shè)置為updated并且這是hexo3.0版本后的默認(rèn)行為,date
表示將文章的Font-matter中的date作為updated,相當(dāng)于將創(chuàng)建時間和更新時間作為一樣的了.而empty就需要自己在文章前加上updated字段,現(xiàn)在網(wǎng)上很多資料要求這么多,但其實新版本hexo已經(jīng)不用了.以下就是一個Font-matter,說白了就是設(shè)置文章的一些信息,這些信息可以從post對象中獲取

打開/themes/next/layout/_macro/post.swig文件

可以看到theme.post_meta字段,這就是自己配置的,在/themes/next/_config.yml文件中

從代碼中可以看出,created_at字段表示是否顯示創(chuàng)建時間,updated_at顯示更新時間.這里打算做的設(shè)置就是創(chuàng)建和更新日期相同只顯示創(chuàng)建如果不同就分別顯示,上述設(shè)置就能起到這樣的作用.
上述操作后就使得能修改文章后post.updated直接就是修改的時間,下面只需要修改排序規(guī)則了.
打開\node_modules\hexo-generator-index-pin-top\lib下的generator.js并修改
'use strict';
var pagination = require('hexo-pagination');
module.exports = function(locals){
var config = this.config;
var posts = locals.posts;
posts.data = posts.data.sort(function(a, b) {
if(a.top && b.top) { // 兩篇文章top都有定義
if(a.top == b.top) return b.date - a.date; // 若top值一樣則按照文章日期降序排
else return b.top - a.top; // 否則按照top值降序排
}
else if(a.top && !b.top) { // 以下是只有一篇文章top有定義,那么將有top的排在前面(這里用異或操作居然不行233)
return -1;
}
else if(!a.top && b.top) {
return 1;
}
else return b.date - a.date; // 都沒定義按照文章日期降序排
});
可以看到如果給文章的Font-matter設(shè)置了top字段就能置頂,top越大約在前面.主要注意date值,需要修改為updated.如下圖即可.

hexo clean,hexo g && hexo d更新后測試

測試成功.
歡迎交流
參考資料
本文由mdnice多平臺發(fā)布