怎么置顶
- 每篇文章增加一个属性top,普通文章设置值为1,置顶文章设置为1以上。
title: Hexo增加置顶属性
date: 2018-09-14 14:57:57
top: 1
tags:
- 博客
- Hexo
- 置顶
- 修改根目录配置文件/_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.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
从截图上可以看到是locals.posts.sort来排序,那么locals.posts又是什么对象,它的sort方法该传什么参数?locals是hexo的全局变量,应该是在核心包中,打开node_modules/hexo/hexo/index.js
从上图可以看出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。
那么根据上图API,明白了怎么添加参数。warehouse排序对于排序字段的值如果没有设置的话,排序就会乱掉,所以必须保证排序字段有值,且要是数字(字符串,简单的尝试了下,感觉比较乱)。