生成器

生成器根据处理后的文件构建路由。

概述

hexo.extend.generator.register(name, function (locals) {
// ...
});

locals 参数将传递给函数,其中包含 站点变量。您应该使用此参数获取网站数据,从而避免直接访问数据库。

更新路由

hexo.extend.generator.register("test", function (locals) {
// Object
return {
path: "foo",
data: "foo",
};

// Array
return [
{ path: "foo", data: "foo" },
{ path: "bar", data: "bar" },
];
});
属性 描述
path 路径,不包括前缀 /
data 数据
layout 布局。指定渲染的布局。值可以是字符串或数组。如果忽略,则路由将直接返回 data

当源文件更新时,Hexo 将执行所有生成器并重建路由。请返回数据,不要直接访问路由器。

示例

归档页

archives/index.html 创建一个归档页。我们将所有文章作为数据传递给模板。此数据等效于模板中的 page 变量。

接下来,设置 layout 属性以使用主题模板进行渲染。在本例中,我们设置了两个布局:如果 archive 布局不存在,则将使用 index 布局。

hexo.extend.generator.register("archive", function (locals) {
return {
path: "archives/index.html",
data: locals,
layout: ["archive", "index"],
};
});

带分页的归档页

您可以使用方便的官方工具 hexo-pagination 来轻松构建带分页的归档页。

var pagination = require("hexo-pagination");

hexo.extend.generator.register("archive", function (locals) {
// hexo-pagination makes an index.html for the /archives route
return pagination("archives", locals.posts, {
perPage: 10,
layout: ["archive", "index"],
data: {},
});
});

生成所有文章

遍历 locals.posts 中的所有文章,并为所有文章创建路由。

hexo.extend.generator.register("post", function (locals) {
return locals.posts.map(function (post) {
return {
path: post.path,
data: post,
layout: "post",
};
});
});

复制文件

这次我们没有显式地返回数据,而是将 data 设置为一个函数,以便路由仅在需要时构建 fs.ReadStream

var fs = require("hexo-fs");

hexo.extend.generator.register("asset", function (locals) {
return {
path: "file.txt",
data: function () {
return fs.createReadStream("path/to/file.txt");
},
};
});