SPxiaomin的博客

hexo置顶功能

按如下的步骤进行操作就可以了。

动手操作步骤

  1. 安装 hexo-generator-index

    npm i --save hexo-generator-index

  2. 将如下的代码加入 node_modules/hexo-generator-index/lib/generator.js

    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; // 都没定义按照文章日期降序排
    });

    最终的 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
    'use strict';
    var pagination = require('hexo-pagination');
    module.exports = function(locals) {
    var config = this.config;
    var posts = locals.posts.sort(config.index_generator.order_by);
    var paginationDir = config.pagination_dir || 'page';
    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; // 都没定义按照文章日期降序排
    });
    return pagination('', posts, {
    perPage: config.index_generator.per_page,
    layout: ['index', 'archive'],
    format: paginationDir + '/%d/',
    data: {
    __index: true
    }
    });
    };
  3. 在需要设置置顶的博文文章 front-matter 中设置 top 值,值越大排在越前面,举例如下:

    1
    2
    3
    title: hexo置顶功能
    date: 2017-02-12 21:14:40
    top: 1

参考

解决hexo置顶问题