文件结构
.├── _config.yml├── languages├── layout├── scripts└── source
_config.yml
主题配置文件,被改动时会自动更新,你无须重新启动服务器。
languages
语言文件夹。Hexo 提供一个简单的内置国际化模块。想要开启这个功能,可以编辑 language
设置。语言代码必须写为[IETF 格式]。如:
language: zh-TW
语言文件夹必须含有一个名为 default.yml
的文件。语言文件可以些微 YAML 格式或者 JSON 格式。
你可以使用 __
和 _p
工具获取局部的字符串。你甚至还可以使用printf format。例如:
index: title: Home add: Add video: zero: No videos one: One video other: %d videos
<%= __('index.title') %>// Home<%= _p('index.video', 3) %>// 3 videos
layout
布局文件夹。以 _
为前缀的文件或文件夹,隐藏文件将会被忽略。
Hexo 提供内置的 EJS 和 Swig 模版引擎。你可以安装一些渲染插件来提供 Haml、 Jade 支持。Hexo 基于文件的扩展名选择模板引擎。例如:
EJS: layout.ejsSwig: layout.swig
每一个模版都至少提供 index
布局。
布局 | 描述 | 依赖 |
---|---|---|
index |
首页布局 | |
post |
文章页布局 | index |
page |
单页布局 | index |
archive |
归档布局 | index |
category |
分类布局 | archive |
tag |
标签布局 | archive |
scripts
脚本文件。当 Hexo 启动时 Javascript 文件将会被加载(Hexo 2.4 及以上)。
更多信息请查看插件页。
source
源文件夹。CSS、Javascript文件等将会被放在这个文件夹里。以 _
文件或文件夹和隐藏文件将会被忽略。
Files which are able to rendered by renderer plugins will be rendered, such as Stylus files. Hexo provides built-in Stylus renderer plugin (with nib support). You can install some renderer plugins for Less, CoffeeScript support.
可以被渲染的文件将会被渲染。Hexo 提供内置的 Stylus 渲染器插件 (包含 nib 支持)。你可以安装一些插件来提供Less, CoffeeScript 支持。
在文件中获取配置信息在文件中,你可以用
hexo-config(key)
获取全局配置和主题配置信息。
布局
Layout wraps a template to another layout template. A layout must contain <%- body %>
so that it can show the contents of the template. For example:
布局包含一个模版和其他的布局模版。一个布局必须提供 <%- body %>
用来显示模版的内容。例如:
index
<!DOCTYPE html><html> <body><%- body %></body></html>
yields:
<!DOCTYPE html><html> <body>index</body></html>
默认的,每个模版文件使用 layout.ejs
作为布局。你可以在前置数据中指定其他的布局。你还可以使用其他的布局来创建一个嵌套布局。
Partial
Partial 帮助你在模版之间共享组件,例如:
<header></header>
<%- partial('_partial/header') %><div id="content"></div>
yields:
<header></header><div id="content"></div>
你可以转换数据到 partials 用定义的本地变量:
<%- partial('_partial/header', {title: 'Hello World'}) %>
更多信息请查看 partial helper.
优化
如果你的主题太复杂,有很多源文件需要创建。生成的性能会降低不少。除了简化你的主题,在Hexo 2.7 中你也可以尝试 片段缓存 。
这个特性是从Ruby on Rails 借鉴而来。它保存内容中的一个片段并在下一个请求到来时使用缓存。这可以减少数据库查询并且更快地生成文件。
它可以被用在页头、页尾、侧边栏或者在你的模版中不会被修改的静态内容。例如:
<%- fragment_cache('header', function(){ return '<header></header>';});
它比 partial 要简单:
<%- partial('header', {}, {cache: true});
发布
你可以将你的主题发布到wiki上的 主题列表。在发布之前,你应当使用 Theme Unit Test 进行测试。