Hexo模板系统和pacman的修改

18 3月

Hexo的原理是解析_posts中的md格式文件,然后根据模板的解析规则进行解析。

我使用的风格修改自pacman,主要它看着比官方默认的主题要充实很多。

但是毕竟是别人做好的,还是有很多不合自己意的,所以还是需要稍微修改一下。

Hexo模板系统

要做出修改,首先要看看Hexo的模板系统是怎么实现的。

Hexo使用的是ejs,类似的东西就多了,比如Jade,swig,doT等等。

ejs效率比较慢(相比其他的),这里有一个测评,也没有Jade有那么多特性。不过好处也是明显的,不需要太多的时间和精力就可以掌握。

在Hexo中有post、page等不同的布局,而选用哪种布局是在md文件中声明的。

Hexo首先解析md文件,然后根据layout.ejs判断布局类型,再转发给其他布局文件。在布局中可以引入其他文件,比如


这样每一块内容都是单独的,方便二次使用,也可以几个不同布局引用一个代码片段。

简要流程

修改几处英文

我没有从官方风格慢慢改,而是选用了pacman,修改了主题色以后感觉就不错了,不过有几处英文显示感觉不舒服。

Hexo是支持多语言的,在_config.xml中配置就可以了,一般使用zh-CN。

首先看看文章末尾的上一篇和下一篇

language中没有对于这个的定义,首先我们补充nextpostprevpostzh-CN.yml


然后修改post文件夹中的pagination.ejs,将PREVIOUS和NEXT替换掉


在Hexo中,多语言支持是通过在语言文件中定义,然后在模板中通过<%= --('name')%>来使用的。

然后是搜索框的提示文字:

因为语言文件中已经有了定义,所以直接修改header.ejs文件


还有一个问题是在上下页的时候,修改方法类似

分页标题修改

还有一处小瑕疵是在分页页面那里,对于文章列表的所有页面,它们的标题都是一样的,而一般而言应该是第%d页 | blog.title

对应的设置在head.ejs中,


首先判断页面类型,然后构造标题,如果没有标题,就使用默认配置中的标题。

很明显,分页页面没有被处理。而其中诸如is_archive()的定义在helper/index.js中,这其中没有关于分页页数的判断方法。

最后参考modernist风格才找到答案。


通过判断page.current来处理。所以我们在head.ejs中的代码修改为


效果:

发表评论

电子邮件地址不会被公开。