实现 hexo 主页按 "置顶 || -更新时间" 排序

写博客写着写着,发现博客的排序好像有点不太对劲。

好像它是按发布时间而不是更新时间来排序的?

于是我逛了逛_config.yml,发现了以下配置项:

# Home page setting
# path: Root path for your blogs index page. (default = '')
# per_page: Posts displayed per page. (0 = disable pagination)
# order_by: Posts order. (Order by date descending by default)
index_generator:
path: ''
per_page: 5
order_by: -date

但是在 hexo 文档中翻来翻去也没有找到 order_by 的其他配置项。迫于无奈,开始了我的魔改之旅。。

魔改 hexo-generator-index

首先从官方文档中得知主页排序是由hexo-generator-index实现的, 易得我们可以魔改该包实现功能。

找到node_modules/hexo-generator-index/lib/generator.js。由于我 js 知识匮乏,加上亿点借鉴 hexo笔记: 文章排序

于是得出了以下魔改代码(位于generator.js.module.exports中):


const config = this.config;
// const posts = locals.posts.sort(config.index_generator.order_by);

const posts = locals.posts
posts.data = posts.data.sort(function(a, b) {
if (a.top && b.top) {
if (a.top == b.top) return b.updated - a.updated;
else return b.top - a.top;
}
else if (a.top && !b.top) return -1;
else if (!a.top && b.top) return 1;
else return b.updated - a.updated;
});

// sort(posts.data, (a, b) => (b.sticky || 0) - (a.sticky || 0));

//以下省略

重启 hexo 服务。嗯。舒服了。

Author: ZhouYingSASA
Link: http://zhouyingsasa.xyz/2020/11/20/hexo-generator-index-update-sort/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.