update hexo 2.5.7 已修复该问题。

hexo是一个由 node.js 驱动的轻量化博客框架。

今天开始将博客框架由原来的 wordpress 更换成轻量化、静态的 hexo. 本文的 hexo 版本为2.4.5, 把原来的 wordpress RSS 导入 后,发现 hexo 的 landscape 主题竟然有一个分类重复的 bug, 该 bug 似乎在项目主页上还经常被提起, 以至于有人专门给出了产生 bug 的最简单的情形. 考虑到作者已经两个月没更新这项目了,我只好自己来了。

问题在于 hexo 2.4.5 的版本通过category.ejs调用了 list_categories 这个新的 API 来产生分类列表的所有信息。对比一下经典的老版 hexo 默认皮肤: light, 发现 category.ejs 里面的实现是裸的,那问题就很好办了,稍微对比一下 html 结构,就得到了这个 bug 的一个临时解决方案:

  1. 打开themes/landscape/layout/_widget/category.ejs, 定位到下面这行

    1
    <%- list_categories() %>
  2. 替换为

    1
    2
    3
    4
    5
    <ul class="category-list">
    <% site.categories.sort('name').each(function(item){ %>
    <li class="category-list-item"><a class="category-list-link" href="<%- config.root %><%- item.path %>"><%= item.name %></a><span class="category-list-count"><%= item.posts.length %></span></li>
    <% }); %>
    </ul>
  3. 保存后运行 hexo clean && hexo generate 即可.

从这些 ejs 文件还能看出,这个版本的 landscape 还是没有 i18n 支持的,作者也太懒了吧。