置顶那些事

文章置顶是很常见的功能,然而hexo并不原生支持。我最近有置顶通知和推荐的需求,最先想到的当然是日期写到很久以后,然后设置future: true。不过找了一下,发现有插件hexo-generator-index-pin-top可以优雅完成,于是试了一下,没有问题。只要设置front-matter中top: true即可,多个置顶按照原先的顺序排序。至于置顶标记,偷懒就直接在标题前加上【置顶】……我满意地走了。

一段时间之后,我突然发现原先的顺序并不符合要求,新插件无视了我要求按更新日期排序,用默认的创建日期排序。代码片段如下(注释也是原文件的):

1
2
3
4
5
6
7
8
9
10
11
12
13
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; // 都没定义按照文章日期降序排
});

可见其直接硬编码了根据创建日期排序。在批判作者的草率的同时,我又不想fork改成updated,也由于js不会写而不能fork原版插件,而且npm安装也是个问题。于是我决定仍用原始方法,把创建日期和修改日期改成2099-12-31,然后设个标记隐藏这个奇怪的日期……