开发者的博客天堂

【真香】hexo-theme-hiero增加文章置顶功能

2020-07-05  本文已影响0人  KangSmit的算法那些事儿

一、单个博文置顶

一种方法是手动对相关文件进行修改,具体可参考这篇文章。

另一种方法就是,目前已经有修改后支持置顶的仓库,可以直接用以下命令安装。

$ npm uninstall hexo-generator-index --save
$ npm install hexo-generator-index-pin-top --save

然后在需要置顶的文章的Front-matter中加上top: true即可。比如下面这篇文章:

title: 核心解密Python函数在(类与函数之间)和(类与类之间)互相调用
categories: 编程小技巧
comments: true
top: true
date: 2020-07-01
photos: 
  - "https://img.haomeiwen.com/i15863171/730c308d8c2138a9.png?imageMogr2/auto-orient/strip|imageView2/2/w/928/format/webp.jpg"

到目前为止,置顶功能已经可以实现了。所有相关博文到这边就结束了。
如果没有该文件,可以新建一个:


image.png

不过置顶的文章显示在最上面之后,如果没有明确的置顶标志,是不是感觉有点怪怪的呢?

设置置顶标志
打开:/blog/themes/next/layout/_macro 目录下的post.swig文件,定位到<div class="post-meta">标签下,插入如下代码:

          {% if post.top %}
            <i class="fa fa-thumb-tack"></i>
            <font color=7D26CD>置顶</font>
            <span class="post-meta-divider">|</span>
          {% endif %}

效果展示:


image.png

添加"置顶"一次之后:

二、多个Hexo博文按顺序置顶

使用的是top属性,top值越高,排序越在前,不设置top值得博文按照时间顺序排序。
修改Hexo文件夹下的node_modules/hexo-generator-index/lib/generator.js

打开在最后添加如下javascript代码

//按照置顶的顺序
  posts.data = posts.data.sort(function(a, b) {
    if(a.top && b.top) { // 两篇文章都有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的排在前面
        return -1;
    }
    else if(!a.top && b.top) {
        return 1;
    }
    else return b.date - a.date;    //都没有top标签,最新的文章在前面
});

如下所示:


image.png

在写文章的时候添加top属性就行了。

文章有多种属性,一个一个添加是不是很麻烦呢?

这个时候可以修改:HEXO博客的scaffolds\post.md

附上个人的post设置

下面我们来看看效果:top: 1 和top: 2


image.png image.png

部署到博客的结果如下:


image.png
上一篇下一篇

猜你喜欢

热点阅读