本文主要对 Hexo 创建的 blog 目录结构以及部分配置文件进行说明。
hexo version 5.0.0
更多信息可阅读官方 Hexo 文档。
# 目录结构
在初始化 hexo 后,根目录结构如下
. | |
├── _config.yml | |
├── package.json | |
├── scaffolds | |
├── source | |
| ├── _drafts | |
| └── _posts | |
└── themes |
# _config.yml
网站的配置信息,在此配置大部分的参数,也可使用代替文件。
# 网站
参数 | 描述 |
---|---|
title | 网站标题 |
subtitle | 网站副标题 |
keywords | 网站的关键词。支持多个关键词。 |
author | 您的名字 |
language | 网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hans 和 zh-CN。 |
timezone | 网站时区。Hexo 默认使用您电脑的时区。请参考 时区列表 进行设置,如 America/New_York, Japan, 和 UTC 。一般的,对于中国大陆地区可以使用 Asia/Shanghai。 |
其中, description
主要用于 SEO,告诉搜索引擎一个关于您站点的简单描述,通常建议在其中包含您网站的关键词。 author
参数用于主题显示文章的作者。
# 网址
参数 | 描述 | 默认值 |
---|---|---|
url | 网址,必须以 http:// 或 https:// 开头 | |
root | 网站根目录 | url's pathname |
permalink | 文章的永久链接格式 | :year/:month/:day/:title/ |
permalink_defaults | 永久链接中各部分的默认值 | |
pretty_urls | 改写 permalink 的值来美化 URL | |
pretty_urls.trailing_index | 是否在永久链接中保留尾部的 index.html,设置为 false 时去除 | true |
pretty_urls.trailing_html | 是否在永久链接中保留尾部的 .html, 设置为 false 时去除 (对尾部的 index.html 无效) | true |
网站存放在子目录
如果您的网站存放在子目录中,例如 http://example.com/blog,则请将您的url
设为 http://example.com/blog 并把root
设为/blog/
。
例如:
一个页面的永久链接是 http://example.com/foo/bar/index.html
pretty_urls:
trailing_index: false
此时页面的永久链接会变为 http://example.com/foo/bar/
# 目录
参数 | 描述 | 默认值 |
---|---|---|
source_dir | 资源文件夹,这个文件夹用来存放内容。 | source |
public_dir | 公共文件夹,这个文件夹用于存放生成的站点文件。 | public |
tag_dir | 标签文件夹 | tags |
archive_dir | 归档文件夹 | archives |
category_dir | 分类文件夹 | categories |
code_dir | Include code 文件夹,source_dir 下的子目录 | downloads/code |
i18n_dir | 国际化(i18n)文件夹 | :lang |
skip_render | 跳过指定文件的渲染。匹配到的文件将会被不做改动地复制到 public 目录中。您可使用 glob 表达式来匹配路径。 |
例如:
skip_render: "mypage/**/*"
直接将source/mypage/index.html
和source/mypage/code.js
不做改动地输出到 'public' 目录
你也可以用这种方法来跳过对指定文章文件的渲染
skip_render: "_posts/test-post.md"
这将会忽略对 'test-post.md' 的渲染
# 文章
参数 | 描述 | 默认值 |
---|---|---|
new_post_name | 新文章的文件名称 | :title.md |
default_layout | 预设布局 | post |
auto_spacing | 在中文和英文之间加入空格 | false |
titlecase | 把标题转换为 title case | false |
external_link | 在新标签中打开链接 | true |
external_link.enable | 在新标签中打开链接 | true |
external_link.field | 对整个网站(site)生效或仅对文章(post)生效 | site |
external_link.exclude | 需要排除的域名。主域名和子域名如 www 需分别配置 | [ ] |
filename_case | 把文件名称转换为 (1) 小写或 (2) 大写 | 0 |
render_drafts | 显示草稿 | false |
post_asset_folder | 启用 资源文件夹 | false |
relative_link | 把链接改为与根目录的相对位址 | false |
future | 显示未来的文章 | true |
syntax_highlighter | 代码块的设置,请参考 代码高亮 进行设置 | highlight.js |
highlight | 代码块的设置,请参考 highlight.js 进行设置 | |
prismjs | 代码块的设置,请参考 PrismJS 进行设置 |
相对地址
默认情况下,Hexo 生成的超链接都是绝对地址。例如,如果您的网站域名为 example.com,您有一篇文章名为 hello,那么绝对链接可能像这样:http://example.com/hello.html,它是绝对于域名的。相对链接像这样:/hello.html,也就是说,无论用什么域名访问该站点,都没有关系,这在进行反向代理时可能用到。通常情况下,建议使用绝对地址。
# 分类 & 标签
参数 | 描述 | 默认值 |
---|---|---|
default_category | 默认分类 | uncategorized |
category_map | 分类别名 | |
tag_map | 标签别名 |
# 日期 / 时间格式
Hexo 使用 Moment.js 来解析和显示时间。
参数 | 描述 | 默认值 |
---|---|---|
date_format | 日期格式 | YYYY-MM-DD |
time_format | 时间格式 | HH:mm:ss |
updated_option | 当 Front Matter 中没有指定 updated 时 updated 的取值 | mtime |
updated_option
updated_option 控制了当 Front Matter 中没有指定 updated 时,updated 如何取值:
- mtime: 使用文件的最后修改时间。这是从 Hexo 3.0.0 开始的默认行为。
- date: 使用 date 作为 updated 的值。可被用于 Git 工作流之中,因为使用 Git 管理站点时,文件的最后修改日期常常会发生改变
- empty: 直接删除 updated。使用这一选项可能会导致大部分主题和插件无法正常工作。
use_date_for_updated
选项已经在v7.0.0+
中被移除。请改为使用updated_option: 'date'
。
# 分页
参数 | 描述 | 默认值 |
---|---|---|
per_page | 每页显示的文章量 (0 = 关闭分页功能) | 10 |
pagination_dir | 分页目录 | page |
tag_map | 标签别名 |
# 例如: | |
pagination_dir: 'page' | |
# http://example.com/page/2 | |
pagination_dir: 'awesome-page' | |
# http://example.com/awesome-page/2 |
# 扩展
参数 | 描述 |
---|---|
theme | 当前主题名称。值为 false 时禁用主题 |
theme_config | 主题的配置文件。在这里放置的配置会覆盖主题目录下的 _config.yml 中的配置 |
deploy | 部署部分的设置 |
meta_generator | Meta generator 标签。 值为 false 时 Hexo 不会在头部插入该标签 |
# 包括或不包括目录和文件
在 Hexo 配置文件中,通过设置 include/exclude 可以让 Hexo 进行处理或忽略某些目录和文件夹。你可以使用 glob
表达式 对目录和文件进行匹配。
include
和 exclude
选项只会应用到 source/
,而 ignore
选项会应用到所有文件夹.
参数 | 描述 |
---|---|
include | Hexo 默认会不包括 source/ 下的文件和文件夹(包括名称以下划线和。开头的文件和文件夹,Hexo 的 _posts 和 _data 等目录除外)。通过设置此字段将使 Hexo 处理他们并将它们复制到 source 目录下 |
exclude | Hexo 不包括 source/ 下的这些文件和目录 |
ignore | Hexo 会忽略整个 Hexo 项目下的这些文件夹或文件 |
# 例如: | |
# 处理或不处理目录或文件 | |
include: | |
- ".nojekyll" | |
# 处理'source/css/_typing.css' | |
- "css/_typing.css" | |
# 处理'source/_css/' 中的任何文件,但不包括子目录及其其中的文件。 | |
- "_css/*" | |
# 处理'source/_css/' 中的任何文件和子目录下的任何文件 | |
- "_css/**/*" | |
exclude: | |
# 不处理'source/js/test.js' | |
- "js/test.js" | |
# 不处理'source/js/' 中的文件、但包括子目录下的所有目录和文件 | |
- "js/*" | |
# 不处理'source/js/' 中的文件和子目录下的任何文件 | |
- "js/**/*" | |
# 不处理'source/js/' 目录下的所有文件名以 'test' 开头的文件,但包括其它文件和子目录下的单文件 | |
- "js/test*" | |
# 不处理'source/js/' 及其子目录中任何以 'test' 开头的文件 | |
- "js/**/test*" | |
# 不要用 exclude 来忽略'source/_posts/' 中的文件。你应该使用'skip_render',或者在要忽略的文件的文件名之前加一个下划线 '_' | |
# 在这里配置一个 - "_posts/hello-world.md" 是没有用的。 | |
ignore: | |
# 忽略任何一个名叫 'foo' 的文件夹 | |
- "**/foo" | |
# 只忽略 'themes/' 下的 'foo' 文件夹 | |
- "**/themes/*/foo" | |
# 对 'themes/' 目录下的每个文件夹中忽略名叫 'foo' 的子文件夹 | |
- "**/themes/**/foo" |
列表中的每一项都必须用单引号或双引号包裹起来。
include
和 exclude
并不适用于 themes/
目录下的文件。如果需要忽略 themes/
目录下的部分文件或文件夹,可以使用 ignore
或在文件名之前添加下划线 _
。
source/_posts
文件夹是一个例外,但该文件夹下任何名称以_
开头的文件或文件夹仍会被忽略。不建议在该文件夹中使用include
规则。
# 使用代替配置文件
可以在 hexo-cli
中使用 --config
参数来指定自定义配置文件的路径。你可以使用一个 YAML 或 JSON 文件的路径,也可以使用逗号分隔(无空格)的多个 YAML 或 JSON 文件的路径。例如:
# 用 'custom.yml' 代替 '_config.yml' | |
$ hexo server --config custom.yml | |
# 使用 'custom.yml' 和 'custom2.json',优先使用 'custom3.yml',然后是 'custom2.json' | |
$ hexo generate --config custom.yml,custom2.json,custom3.yml |
当你指定了多个配置文件以后,Hexo 会按顺序将这部分配置文件合并成一个 _multiconfig.yml
。如果遇到重复的配置,排在后面的文件的配置会覆盖排在前面的文件的配置。这个原则适用于任意数量、任意深度的 YAML 和 JSON 文件。
例如,使用 --config
指定了两个自定义配置文件:
$ hexo generate --config custom.yml,custom2.json |
如果 custom.yml
中指定了 foo: bar
,在 custom2.json 中指定了 "foo": "dinosaur"
,那么在 _multiconfig.yml
中你会得到 foo: dinosaur
。
# 使用代替主题配置文件
通常情况下,Hexo 主题是一个独立的项目,并拥有一个独立的 _config.yml
配置文件。
除了自行维护独立的主题配置文件,你也可以在其它地方对主题进行配置。
配置文件中的 theme_config
该特性自 Hexo 2.8.2 起提供
# _config.yml | |
theme: "my-theme" | |
theme_config: | |
bio: "My awesome bio" | |
foo: | |
bar: 'a' |
# themes/my-theme/_config.yml | |
bio: "Some generic bio" | |
logo: "a-cool-image.png" | |
foo: | |
baz: 'b' |
最终主题配置的输出是:
{ | |
bio: "My awesome bio", | |
logo: "a-cool-image.png", | |
foo: { | |
bar: "a", | |
baz: "b" | |
} | |
} |
独立的 _config.[theme].yml
文件
该特性自 Hexo 5.0.0 起提供
# _config.yml | |
theme: "my-theme" | |
# _config.my-theme.yml | |
bio: "My awesome bio" | |
foo: | |
bar: 'a' |
# themes/my-theme/_config.yml | |
bio: "Some generic bio" | |
logo: "a-cool-image.png" | |
foo: | |
baz: 'b' |
最终主题配置的输出是:
{ | |
bio: "My awesome bio", | |
logo: "a-cool-image.png", | |
foo: { | |
bar: "a", | |
baz: "b" | |
} | |
} |
我们强烈建议你将所有的主题配置集中在一处。如果你不得不在多处配置你的主题,那么这些信息对你将会非常有用:Hexo 在合并主题配置时,Hexo 配置文件中的
theme_config
的优先级最高,其次是_config.[theme].yml
文件,最后是位于主题目录下的_config.yml
文件。
# package.json
应用程序的信息。EJS , Stylus 和 Markdown 渲染引擎 已默认安装,您可以自由移除。
package.json | |
{ | |
"name": "hexo-site", | |
"version": "0.0.0", | |
"private": true, | |
"hexo": { | |
"version": "" | |
}, | |
"dependencies": { | |
"hexo": "^7.0.0", | |
"hexo-generator-archive": "^2.0.0", | |
"hexo-generator-category": "^2.0.0", | |
"hexo-generator-index": "^3.0.0", | |
"hexo-generator-tag": "^2.0.0", | |
"hexo-renderer-ejs": "^2.0.0", | |
"hexo-renderer-stylus": "^3.0.0", | |
"hexo-renderer-marked": "^6.0.0", | |
"hexo-server": "^3.0.0", | |
"hexo-theme-landscape": "^1.0.0" | |
} | |
} |
# scaffolds
模版 文件夹。当您新建文章时,Hexo 会根据 scaffold
来创建文件。
Hexo 的模板是指在新建的文章文件中默认填充的内容。例如,如果您修改 scaffold/post.md
中的 Front-matter
内容,那么每次新建一篇文章时都会包含这个修改。
# source
资源文件夹是存放用户资源的地方。除 _posts
文件夹之外,开头命名为 _
(下划线) 的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public
文件夹,而其他文件会被拷贝过去。
# themes
主题 文件夹。Hexo 会根据主题来生成静态页面。
# 基本操作
# 写作
你可以执行下列命令来创建一篇新文章或者新的页面。
$ hexo new [layout] <title> |
您可以在命令中指定文章的布局(layout),默认为 post
,可以通过修改 _config.yml
中的 default_layout
参数来指定默认布局。
# 布局(Layout)
Hexo 有三种默认布局: post
、 page
和 draft
。在创建这三种不同类型的文件时,它们将会被保存到不同的路径;而您自定义的其他布局和 post
相同,都将储存到 source/_posts
文件夹。
布局 | 路径 |
---|---|
post | source/_posts |
page | source |
draft | source/_drafts |
禁用布局
如果你不希望一篇文章(post/page)使用主题处理,请在它的front-matter
中设置layout: false
。
# 文件名称
Hexo 默认以标题做为文件名称,但您可编辑 new_post_name
参数来改变默认的文件名称,举例来说,设为 :year-:month-:day-:title.md
可让您更方便的通过日期来管理文章。你可以使用以下占位符:
变量 | 描述 |
---|---|
:title | 标题(小写,空格将会被替换为短杠) |
:year | 建立的年份,比如, 2015 |
:month | 建立的月份(有前导零),比如, 04 |
:i_month | 建立的月份(无前导零),比如, 4 |
:day | 建立的日期(有前导零),比如, 07 |
:i_day | 建立的日期(无前导零),比如, 7 |
# 草稿
刚刚提到了 Hexo 的一种特殊布局: draft
,这种布局在建立时会被保存到 source/_drafts
文件夹,您可通过 publish
命令将草稿移动到 source/_posts
文件夹,该命令的使用方式与 new
十分类似,您也可在命令中指定 layout
来指定布局。
$ hexo publish [layout] <title> |
草稿默认不会显示在页面中,您可在执行时加上 --draft
参数,或是在 _config.yml
中把 render_drafts
参数设为 true
来预览草稿。
# 模版(Scaffold)
在新建文章时,Hexo 会根据 scaffolds
文件夹内相对应的文件来建立文件,例如:
$ hexo new photo "My Gallery" |
在执行这行指令时,Hexo 会尝试在 scaffolds
文件夹中寻找 photo.md
,并根据其内容建立文章,以下是您可以在模版中使用的变量:
变量 | 描述 |
---|---|
layout | 布局 |
title | 标题 |
date | 文件建立日期 |
# 支持的格式
Hexo 支持以任何格式书写文章,只要安装了相应的渲染插件。
例如,Hexo 默认安装了 hexo-renderer-marked
和 hexo-renderer-ejs
,因此你不仅可以用 Markdown
写作,你还可以用 EJS
写作。如果你安装了 hexo-renderer-pug
,你甚至可以用 Pug
模板语言书写文章。
只需要将文章的扩展名从 md
改成 ejs
,Hexo 就会使用 hexo-renderer-ejs
渲染这个文件,其他格式同。
# Front-matter
Front-matter 是文件最上方以 --- 分隔的区域,用于指定个别文件的变量,举例来说:
--- | |
title: Hello World | |
date: 2023/12/13 20:46:25 | |
--- |
以下是预先定义的参数,您可在模板中使用这些参数值并加以利用。
变量 | 描述 | 默认值 |
---|---|---|
layout | 布局 | config.default_layout |
title | 标题 | 文章的文件名 |
date | 建立日期 | 文件建立日期 |
updated | 更新日期 | 文件更新日期 |
comments | 开启文章的评论功能 | true |
tags | 标签(不适用于分页) | |
categories | 分类(不适用于分页) | |
permalink | 覆盖文章的永久链接,永久链接应该以 / 或 .html 结尾 | null |
excerpt | 纯文本的页面摘要。使用 标签插件 来格式化文本 | |
disableNunjucks | 启用时禁用 Nunjucks 标签 {{ }}/{% %} 和 标签插件 的渲染功能 | false |
lang | 设置语言以覆盖 自动检测 | 继承自 _config.yml |
published | 文章是否发布 | 对于 _posts 下的文章为 true ,对于 _draft 下的文章为 false |
# 布局
根据 _config.yml
中 default_layout
的设置,默认布局是 post
。当文章中的布局被禁用 (layout: false)
,它将不会使用主题处理。然而,它仍然会被任何可用的渲染引擎渲染:如果一篇文章是用 Markdown 写的,并且安装了 Markdown 渲染引擎(比如默认的 hexo-renderer-marked
),它将被渲染成 HTML。
除非通过 disableNunjucks
设置或渲染引擎禁用,否则无论布局如何,标签插件总是被处理。
# 分类和标签
只有文章支持分类和标签,您可以在 Front-matter
中设置。在其他系统中,分类和标签听起来很接近,但是在 Hexo 中两者有着明显的差别:分类具有顺序性和层次性,也就是说 Foo
, Bar
不等于 Bar
, Foo
;而标签没有顺序和层次。
categories: | |
- Diary | |
tags: | |
- PS3 | |
- Games |
分类方法的分歧
如果您有过使用 WordPress 的经验,就很容易误解 Hexo 的分类方式。WordPress 支持对一篇文章设置多个分类,而且这些分类可以是同级的,也可以是父子分类。但是 Hexo 不支持指定多个同级分类。下面的指定方法:
categories: | |
- Diary | |
- Life |
会使分类 Life
成为 Diary
的子分类,而不是并列分类。因此,有必要为您的文章选择尽可能准确的分类。
如果你需要为文章添加多个分类,可以尝试以下 list 中的方法。
categories: | |
- [Diary, PlayStation] | |
- [Diary, Games] | |
- [Life] |
此时这篇文章同时包括三个分类: PlayStation
和 Games
分别都是父分类 Diary
的子分类,同时 Life
是一个没有子分类的分类。
# JSON Front-matter
除了 YAML 外,你也可以使用 JSON 来编写 Front-matter,只要将 ---
代换成 ;;;
即可。
"title": "Hello World", | |
"date": "2013/7/13 20:46:25" | |
;;; |
# 标签插件(Tag Plugins)
标签插件和 Front-matter 中的标签不同,它们是用于在文章中快速插入特定内容的插件。
虽然你可以使用任何格式书写你的文章,但是标签插件永远可用,且语法也都是一致的。
标签插件不应该被包裹在 Markdown 语法中,例如:[]({% post_path lorem-ipsum %})
是不被支持的。
# 引用资源
引用文章的资源,与 资源文件夹 一起使用。
<!--swig3--> | |
<!--swig4--> | |
<!--swig5--> |
# 嵌入图片
hexo-renderer-marked 3.1.0+ 可以(可选)自动解析图片的文章路径,参考 资源文件夹
章节。
“foo.jpg” 位于 http://example.com/2020/01/02/hello/foo.jpg
。
# 默认(无选项)
{% asset_img foo.jpg %}
<img src="/2020/01/02/hello/foo.jpg"> |
# 自定义 class 属性
{% asset_img post-image foo.jpg %}
<img src="/2020/01/02/hello/foo.jpg" class="post-image"> |
# 展示尺寸
{% asset_img foo.jpg 500 400 %}
<img src="/2020/01/02/hello/foo.jpg" width="500" height="400"> |
# title 和 alt 属性
{% asset_img logo.svg"lorem ipsum'dolor'"%}
<img src="/2020/01/02/hello/foo.jpg" title="lorem ipsum" alt="dolor"> |
# 文章摘要和截断
在文章中使用 <!-- more -->
,那么 <!-- more -->
之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。
例如:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. | |
<!-- more --> | |
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. |
首页中将只会出现
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. |
正文中则会出现
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. | |
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. |
注意,摘要可能会被 Front Matter
中的 excerpt
覆盖。
# iframe
在文章中插入 iframe。
<!--swig10--> |
# Image
在文章中插入指定大小的图片。
<!--swig11--> |
# Link
在文章中插入链接,并自动给外部链接添加 target="_blank"
属性。
<!--swig12--> |
# 资源文件夹
# 全局资源文件夹
资源(Asset)代表・・文件夹中除了文章以外的所有文件,例如图片、CSS、JS 文件等。比方说,如果你的 Hexo 项目中只有少量图片,那最简单的方法就是将它们放在 source/images
文件夹中。然后通过类似于 ![](/images/image.jpg)
的方法访问它们。
# 文章资源文件夹
对于那些想要更有规律地提供图片和其他资源以及想要将他们的资源分布在各个文章上的人来说,Hexo 也提供了更组织化的方式来管理资源。这个稍微有些复杂但是管理资源非常方便的功能可以通过将 config.yml
文件中的 post_asset_folder
选项设为 true
来打开。
#_config.yml | |
post_asset_folder: true |
当资源文件管理功能打开后,Hexo 将会在你每一次通过 hexo new [layout] <title>
命令创建新文章时自动创建一个文件夹。这个资源文件夹将会有与这个文章文件一样的名字。将所有与你的文章有关的资源放在这个关联文件夹中之后,你可以通过相对路径来引用它们,这样你就得到了一个更简单而且方便得多的工作流。
# 相对路径引用的标签插件
通过常规的 markdown
语法和相对路径来引用图片和其它资源可能会导致它们在存档页或者主页上显示不正确。在 Hexo 2 时代,社区创建了很多插件来解决这个问题。但是,随着 Hexo 3 的发布,许多新的标签插件被加入到了核心代码中。这使得你可以更简单地在文章中引用你的资源。
<!--swig13--> | |
<!--swig14--> | |
<!--swig15--> |
比如说:当你打开文章资源文件夹功能后,你把一个 example.jpg
图片放在了你的资源文件夹中,如果通过使用相对路径的常规 markdown 语法 ![](example.jpg)
,它将 不会 出现在首页上。(但是它会在文章中按你期待的方式工作)
正确的引用图片方式是使用下列的标签插件而不是 markdown :
<!--swig16--> |
通过这种方式,图片将会同时出现在文章和主页以及归档页中。
# 使用 Markdown 嵌入图片
hexo-renderer-marked 3.1.0 引入了一个新的选项,其允许你无需使用 asset_img
标签插件就可以在 markdown 中嵌入图片
如需启用:
_config.yml | |
post_asset_folder: true | |
marked: | |
prependRoot: true | |
postAsset: true |
启用后,资源图片将会被自动解析为其对应文章的路径。
例如: image.jpg
位置为 /2020/01/02/foo/image.jpg
,这表示它是 /2020/01/02/foo/
文章的一张资源图片, ![](image.jpg)
将会被解析为 <img src="/2020/01/02/foo/image.jpg">
。
# 数据文件夹
有时您可能需要在主题中使用某些数据,而这些数据并不在文章内,并且是需要重复使用的,那么您可以考虑使用 Hexo 3.0 新增的「数据文件」功能。此功能会加载 source/_data
内的 YAML 或 JSON 文件,如此一来您便能在网站中复用这些文件了。
举例来说,在 source/_data
文件夹中新建 menu.yml
文件:
Home: / | |
Gallery: /gallery/ | |
Archives: /archives/ |
您就能在模板中使用这些数据:
<% for (var link in site.data.menu) { %> | |
<a href="<%= site.data.menu [link] %>"> <%= link %> </a> | |
<% } %> |
渲染结果如下 :
<a href="/"> Home </a> | |
<a href="/gallery/"> Gallery </a> | |
<a href="/archives/"> Archives </a> |
# 自定义
# 永久链接(Permalinks)
您可以在 _config.yml
配置中调整网站的永久链接或者在每篇文章的 Front-matter
中指定。
# 变量
除了下列变量外,您还可使用除了 :path
和 :permalink
之外 Front-matter
中的所有属性。
变量 | 描述 |
---|---|
:year | 文章的发表年份(4 位数) |
:month | 文章的发表月份(2 位数) |
:i_month | 文章的发表月份(不含前导零) |
:day | 文章的发表日期 (2 位数) |
:i_day | 文章的发表日期(不含前导零) |
:hour | 文章发表时的小时 (2 位数) |
:minute | 文章发表时的分钟 (2 位数) |
:second | 文章发表时的秒钟 (2 位数) |
:title | 文件名称 (相对于 source/_posts/ 文件夹) |
:name | 文件名称 |
:post_title | 文章标题 |
:id | 文章 ID (清除缓存时不具有持久性) |
:category | 分类。如果文章没有分类,则是 default_category 配置信息。 |
:hash | 文件名(与 :title 相同)和日期的 SHA1 哈希值(12 位 16 进制数) |
您可在 permalink_defaults
参数下调整永久链接中各变量的默认值:
permalink_defaults: | |
lang: en |
# 示例
# source/_posts/hello-world.md | |
title: Hello World | |
date: 2013-07-14 17:01:34 | |
categories: | |
- foo | |
- bar |
参数 | 结果 |
---|---|
:year/:month/:day/:title/ | 2013/07/14/hello-world/ |
:year-:month-:day-:title.html | 2013-07-14-hello-world.html |
:category/:title/ | foo/bar/hello-world/ |
:title-:hash/ | hello-world-a2c8ac003b43/ |
# source/_posts/lorem/hello-world.md | |
title: Hello World | |
date: 2013-07-14 17:01:34 | |
categories: | |
- foo | |
- bar |
参数 | 结果 |
---|---|
:year/:month/:day/:title/ | 2013/07/14/lorem/hello-world/ |
:year/:month/:day/:name/ | 2013/07/14/hello-world/ |
# 多语种支持
若要建立一个多语种的网站,您可修改 new_post_name
和 permalink
参数,如下:
new_post_name: :lang/:title.md | |
permalink: :lang/:title/ |
当您建立新文章时,文章会被储存到:
$ hexo new "Hello World" --lang tw | |
# => source/_posts/tw/Hello-World.md |
而网址会是 http://localhost:4000/tw/hello-world/
# 国际化(i18n)
若要让您的网站以不同语言呈现,您可使用国际化(internationalization)功能。请先在 _config.yml
中调整 language
设定,这代表的是预设语言,您也可设定多个语言来调整预设语言的顺位。
language: zh-tw | |
language: | |
- zh-tw | |
- en |
# 语言文件
语言文件可以使用 YAML 或 JSON 编写,并放在主题文件夹中的 languages
文件夹。您可以在语言文件中使用 printf
格式。
# 模板
在模板中,通过 __
或 _p
辅助函数,即可取得翻译后的字符串,前者用于一般使用;而后者用于复数字符串。例如:
en.yml | |
index: | |
title: Home | |
add: Add | |
video: | |
zero: No videos | |
one: One video | |
other: % d videos |
<%= __('index.title') %> | |
// Home | |
<%= _p ('index.video', 3) %> | |
// 3 videos |
# 路径
您可在 front-matter 中指定该页面的语言,也可在 _config.yml
中修改 i18n_dir
设定,让 Hexo 自动侦测。
i18n_dir: :lang |
i18n_dir 的预设值是 :lang
,也就是说 Hexo 会捕获网址中的第一段以检测语言,举例来说:
/index.html => en | |
/archives/index.html => en | |
/zh-tw/index.html => zh-tw |
捕获到的字符串唯有在语言文件存在的情况下,才会被当作是语言,因此例二 /archives/index.html
中的 archives
就不被当成是语言。