Hexo增加置顶属性

怎么置顶

  1. 每篇文章增加一个属性top,普通文章设置值为1,置顶文章设置为1以上。
title: Hexo增加置顶属性
date: 2018-09-14 14:57:57
top: 1
tags:
  - 博客
  - Hexo
  - 置顶
  1. 修改根目录配置文件/_config.yml,top值-1标示根据top值倒序(正序设置为1即可),同样date也是根据创建日期倒序。
index_generator:
  path: ''
  per_page: 10
  order_by:
    top: -1
    date: -1

* top的值每篇文章都要设置,如果没设置会导致部分排序不正确 *

说明(源码解读)

hexo置顶功能,也就是指定首页列表的排序,当前默认的是按照创建日期的倒叙,那我怎么才能修改?hexo整个结构就是核心的hexo包+扩展包,生成首页的是扩展插件node_modules/hexo-generator-index中。
Hexo增加置顶属性_第1张图片

从上面截图可以到到hexo.config.index_generator.order_by这个属性是配置index的排序,打开根目录下/_config.yml文件可以看大以下配置

index_generator:
  path: ''
  per_page: 10
  order_by: -date

那么我该怎么修改配置?打开node_modules/hexo-generator-index/lib/generator.js
Hexo增加置顶属性_第2张图片
从截图上可以看到是locals.posts.sort来排序,那么locals.posts又是什么对象,它的sort方法该传什么参数?locals是hexo的全局变量,应该是在核心包中,打开node_modules/hexo/hexo/index.js

Hexo增加置顶属性_第3张图片
从上图可以看出locals.posts是由db.model(‘Page’).find(query)返回的,那么db这个是什么?

const Database = require('warehouse');
...
this.database = new Database({
    version: dbVersion,
    path: pathFn.join(base, 'db.json')
  });
..
Hexo.prototype._bindLocals = function() {
  const db = this.database;
...

db是warehouse模块返回的,warehouse是hexo维护的一个json数据库,可以类似SQL来操作JSON。

Hexo增加置顶属性_第4张图片

那么根据上图API,明白了怎么添加参数。warehouse排序对于排序字段的值如果没有设置的话,排序就会乱掉,所以必须保证排序字段有值,且要是数字(字符串,简单的尝试了下,感觉比较乱)。

你可能感兴趣的:(技术-前端,Hexo,博客,置顶,源码阅读)