模板

模板通过描述每个页面应该是什么样子来定义网站的呈现方式。下表显示了每个可用页面的对应模板。至少,一个主题应该包含一个 `index` 模板。

模板 页面 回退
index 主页
post 文章 index
page 页面 index
archive 归档 index
category 分类归档 archive
tag 标签归档 archive

布局

当页面共享类似的结构时 - 例如,当两个模板都具有标题和页脚时 - 您可能需要考虑使用 `layout` 来声明这些结构上的相似性。每个布局文件都应该包含一个 `body` 变量来显示相关模板的内容。例如

index.ejs
index
layout.ejs
<!doctype html>
<html>
<body>
<%- body %>
</body>
</html>

yield

<!doctype html>
<html>
<body>
index
</body>
</html>

默认情况下,所有其他模板都使用 `layout` 模板。您可以在前置 matter 中指定额外的布局,或者将其设置为 `false` 以禁用它。通过在您的顶级布局中包含更多布局模板,甚至可以构建一个复杂的嵌套结构。

部分

部分对于在您的模板之间共享组件非常有用。典型的示例包括标题、页脚或侧边栏。您可能希望将您的部分放到单独的文件中,以使维护您的网站更加方便。例如

partial/header.ejs
<h1 id="logo"><%= config.title %></h1>
index.ejs
<%- partial('partial/header') %>
<div id="content">Home page</div>

yield

<h1 id="logo">My Site</h1>
<div id="content">Home page</div>

局部变量

您可以在模板中定义局部变量,并在其他模板中使用它们。

partial/header.ejs
<h1 id="logo"><%= title %></h1>
index.ejs
<%- partial('partial/header', {title: 'Hello World'}) %>
<div id="content">Home page</div>

yield

<h1 id="logo">Hello World</h1>
<div id="content">Home page</div>

优化

如果您的主题非常复杂,或者要生成的 文件数量过多,Hexo 的文件生成性能可能会显著下降。除了简化您的主题外,您还可以尝试片段缓存,它是在 Hexo 2.7 中引入的。

此功能借鉴了 Ruby on Rails。它会导致内容被保存为片段并缓存起来,以便在进行额外请求时使用。这可以减少数据库查询的数量,并可以加快文件生成速度。

片段缓存最适合用于标题、页脚、侧边栏或其他不太可能在模板之间发生更改的静态内容。例如

<%- fragment_cache('header', function(){
return '<header></header>';
});

虽然使用部分可能更容易

<%- partial('header', {}, {cache: true});

fragment_cache() 将缓存渲染的结果并将缓存的结果输出到其他页面。这应该只用于预期 **不会** 跨不同页面发生更改的部分。否则,**不应该** 启用它。
例如,当在配置中启用 `relative_link` 时,它应该被禁用。这是因为相对链接可能会在不同页面上显示不同。