ジェネレーター

ジェネレーターは、処理されたファイルに基づいてルートを構築します。

概要

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` 属性を設定します。この例では、2つのレイアウトを設定しています。`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");
},
};
});