Hexo 自定义文章排序规则

按文章更新时间排序, 这里需要注意的是排序值的KEY不能为updated, 要不然就是使用文章更新时间来排序了

  1. 配置 next.yml

    1
    2
    3
    post_meta:
    updated_at: false
    updated_diff: false
  2. 编辑 themes/next/layout/_macro/post.swig, 在 <span class="post-time"></span> 后添加以下代码

    1
    2
    3
    4
    5
    6
    7
    8
    {% if post.updateTime %}
    <span class="post-meta-divider">|</span>
    <span class="post-meta-item-icon">
    <i class="fa fa-calendar-check-o"></i>
    </span>
    <span class="post-meta-item-text">{{ __('post.modified') }}&#58;</span>
    <time title="{{ __('post.modified') }}" itemprop="dateModified" datetime="{{ moment(post.updateTime).format() }}">{{ date(post.updateTime, config.date_format) }}</time>
    {% endif %}
  3. 修改 hexo 文件夹下的 node_modules/hexo-generator-index/lib/generator.js, 在生成文章之前进行文章 updateTime 值排序

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    'use strict';

    var pagination = require('hexo-pagination');

    module.exports = function(locals) {
    var config = this.config;
    /*******START*******/
    //var posts = locals.posts.sort(config.index_generator.order_by);
    var paginationDir = config.pagination_dir || 'page';
    var path = config.index_generator.path || '';
    var posts = locals.posts;
    posts.data = posts.data.sort(function(a, b) {
    let aUpdateTime = a.updateTime ? (new Date(a.updateTime)).getTime() : 0;
    let bUpdateTime = b.updateTime ? (new Date(b.updateTime)).getTime() : 0;
    if (aUpdateTime && bUpdateTime) {
    // updateTime 一样, 则按照文章日期降序, 否则按照 updateTime 降序
    return aUpdateTime === bUpdateTime ? b.date - a.date : bUpdateTime - aUpdateTime;
    }
    // 更新时间不能大于发布时间
    else if (aUpdateTime && !bUpdateTime) {
    return aUpdateTime > b.date ? -1 : 1;
    }
    else if (!aUpdateTime && bUpdateTime) {
    return bUpdateTime > a.date ? 1 : -1;
    }
    // 按照文章日期降序
    else {
    return b.date - a.date;
    }
    });
    /*******END*******/

    return pagination(path, posts, {
    perPage: config.index_generator.per_page,
    layout: ['index', 'archive'],
    format: paginationDir + '/%d/',
    data: {
    __index: true
    }
    });
    };

    # 调用方式
    ---
    title: Hexo 自定义文章排序规则
    date: 2018-04-24 14:18:20
    updateTime: 2018-04-27 09:46:00
    categories: Hexo
    ---
  4. 清除 hexo 缓存

    1
    hexo clean
0%