Ethan's Blog

记录和思考

Hexo 标签云中按照标签使用频率排序

今天准备为 Hexo 博客主题加上侧边栏的标签云( tagcloud )效果,想把出现频率较高的 tag 显示出来,但是查询 Hexo 的文档发现,辅助函数 tagcloud 文档( https://hexo.io/zh-cn/docs/helpers#tagcloud )并没有说清楚其中的 order 参数支持哪些,那么如何使得 Hexo 的标签云按照使用频率来排序呢?Hexo 的标签云函数支持哪些参数?为了弄清楚这个问题,看了一下 Hexo 的代码,将 Hexo tagcloud 支持的参数记录下来,特别地,实现了根据 tag 的使用频率来排序。

首先我们知道辅助函数 tagcloud 是通过 helper 的方式在 Hexo 中实现的,我们找到 Hexo 博客安装路径下的 Hexo 包,定位到 ./node_modules/hexo/lib/plugins/helper/tagcloud.js 即可看到辅助函数 tagcloud 的实现方式。

简单来说,Hexo 的辅助函数 tagcloud 调用了 Hexo 的网站变量 site.tags,然后通过以下代码来排序:

// Sort the tags
if (orderby === 'random' || orderby === 'rand') {
  tags = tags.random();
} else {
  tags = tags.sort(orderby, order);
}

这样一来就清晰了,首先支持 random 排序,其次支持按照 tags 本身拥有的 keys 进行排序。接下来我们通过 console.log(site.tags) 打印出来网站的 tags 看看其结构,得出支持的常用排序参数如下:

random - 随机
name - 名称
length - 使用频率

那么,Hexo 根据标签使用频率排序标签云的实现方式就很简单了:

<%- tagcloud({
    min_font: 1,
    max_font: 1,
    unit: 'em',
    amount: 60,
    orderby: 'length',
    order: -1
}) %>

以上就是 Hexo 根据标签使用频率从大到小进行排序的实现。

相关文章: