永久链接
我们在访问文章页面时,会发现默认的文章链接相当的长
特别是使用中文作为标题的时候,分享给别人的链接满是中文链接的转义字符,非常不好看,但在HEXO官方文档中也只提供了一些参数可供修改
您可以在 _config.yml 配置中调整网站的永久链接或者在每篇文章的 Front-matter 中指定。
变量
除了下列变量外,您还可使用 Front-matter 中的所有属性。
变量 描述 :year 文章的发表年份(4 位数) :month 文章的发表月份(2 位数) :i_month 文章的发表月份(去掉开头的零) :day 文章的发表日期 (2 位数) :i_day 文章的发表日期(去掉开头的零) :title 文件名称 :post_title 文章标题 :id 文章 ID :category 分类。如果文章没有分类,则是 default_category 配置信息。
但你会发现除了使用 year,month,day之外就剩文章名称,文章ID,文章分类了,让文章按照年月日做链接比如 2018010101(2018年1月1日第一篇文章) 这种链接基本没有办法生成,用 title属性就会变得又臭又长,文章ID也没有规律可循,怎么办呢?
这时候翻到官方文档的下面,就会发现有个 多语种支持一栏,里面就提到一个参数 permalink:,当你在文章的头中加入这个参数,不得了,文章的链接就会变成你自定义的 permalink参数,但每次写文章都要自定义一下岂不是很麻烦?
我希望能够在我新建一个文章的时候 permalink:参数就可以帮我写好,或者我的文章链接能用文章创建的日期时间作为链接。
尝试
之后我尝试在新 建文章模板(scaddolds/post.md) 中加入 permalink参数,并定义参数为 year:month:day发现并没有什么作用,你会发现新建一篇文章之后,参数 year:month:day并没有被转换成你想要的,反而被当成字符串处理了。遂百度了一下如何解决看到很多的教程都提到了使用 hexo-addrlink插件来实现唯一链接
相关教程链接。
hexo-addrlink插件可以给每一篇文章通过文章标题(hexo中文章标题是不能重复的)生成唯一的编码,来实现链接唯一化。但是还是觉得这个插件生成的唯一代码太长了,也没有逻辑,我还是希望能够用时间和日期作为唯一链接。百度找啊找都没找到相关的教程,遂打开了 hexo-addrlink插件看一下是怎么实现的,这一看之下代码并不多,哎,萌生了自己也写一个类似插件的想法。
编写插件
怎么编写插件呢?
关于 HEXO的插件编写教程,百度上能找到的太少了,还好,找到了一篇并且质量还不错的文章介绍了 HEXO插件的编写
相关文章链接。
之后就大题明白了插件的写法,但是如何获取每一篇文章的创建日期呢?
最后在 HEXO官方API文档 中找到了相关信息,API文档链接,内容是这样的
您可以在资料中指定文章的属性,除了以下属性之外,其他属性也会被加到 front-matter 中。
属性 描述 title 标题 slug 网址 layout 布局。默认为 default_layout 参数。 path 路径。默认会根据 new_post_path 参数创建文章路径。 date 日期。默认为当前时间。
获取了时间就好说了,现在就开始写,HEXO插件文档
编写代码
根据文档的说法,因为我要编写的插件并不大,遂可以直接写在 主题文件夹/scripts/文件夹下,名字随意,就命名为 datelink.js吧
依葫芦画瓢,看着 hexo-addrlink插件源码就这么抄了个大概下来,写完后代码是这样的1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 ;
var hexo = hexo || {};
hexo.extend.filter.register('before_post_render',function(data)
{
var log = this.log;
if (data.layout == 'post')
{
let datelink
if (!datelink)
{
var getdate = data.date;
//log.i("get date [%s]", getdate.format('YYYYMMDDhhmmss'));
data.datelink = getdate.format('YYYYMMDDhhmmss');
}
}
return data
},15);
由于没有学过JS的关系,都不知道原来date型数据可以直接 format格式化输出,还跑去官方文档查辅助函数,去反查上次使用的 full_date函数在哪里,最后通过翻各种JS源码,才发现直接 format解决了…哎,果然是技术不精啊
由于我给 data数据定的是 datelink,所以也要在HEXO配置文件 _config.yml中添加相关的参数:1
2
3permalink: :datelink.html
permalink_defaults:
datelink:
permalink末尾加了 .html听说是可以有利于搜索引擎,就加上去了(注意:加.html后会导致文章页面和文章资源文件夹分离)
测试成果
运行 hexo server测试一波,很好,成功的使用了时间和日期作为文章的唯一链接啦!!!
研究了一整天终究是没有白费,看来得去学一下 js/nodejs了
进阶
format参数可以放在 _config.yml文件中,这样可以随时修改网址格式,只需要添加子参数
1
2 datelink:
format:只需访问 this.config.datelink.format变量即可获取到相应的参数,相信你已经知道怎么改了
所参考的文档和文章:
HEXO官方文档:https://hexo.io/zh-cn/docs/permalinks
hexo进阶文章:http://muyunyun.cn/posts/f55182c5/
插件编写教程文章:https://blog.csdn.net/melordljm/article/details/51985157
HEXO-API:https://hexo.io/zh-cn/api/posts