Generator

Generator는 처리된 파일들을 기준으로 경로(route)를 생성합니다.

개요

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

locals인자는 사이트 변수(site variables)를 포함하며 함수를 통해 전달될 것입니다. 이 인자를 사용하면 데이터베이스에 직접 접근하지 않고도 웹 사이트의 데이터를 얻을 수 있습니다.

경로(route) 업데이트

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 레이아웃. 렌더링할 레이아웃을 지정합니다. 이 값은 string 또는 array입니다. 이 값이 무시된다면 data의 직접적인 경로가 반환됩니다.

소스 파일들이 업데이트 되면, Hexo는 모든 generator들을 실행하고 경로(route)를 재구성합니다. 제발 라우터에 직접 접근하지 마시고 데이터를 리턴하세요.

예제

Archive Page

Archive page를 archives/index.html에 생성합니다. We pass all posts as data to the templates. 우리는 모든 포스트 데이터를 템플릿으로 전달합니다.이 데이터는 템플릿의 page 변수와 같습니다.

다음, 테마 템플릿 렌더링을 위한 layout 속성을 설정합니다. 아래 예시에서 두 개의 레이아웃 설정을 확인할 수 있습니다. 만약 archive 레이아웃이 존재하지 않는다면 index 레이아웃이 사용될 것입니다.

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

Archive Page에 Pagination 사용하기

Hexo 공식 툴인 hexo-pagination을 사용하여 간편하게 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에 포함된 모든 포스트들을 순회하고 각각의 포스트에 대한 경로(route)를 생성합니다.

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

파일 복사

이 시점에 우리는 명시적인 데이터를 반환하지 않고 필요한 경우에만 경로(route)는 fs.ReadStream를 생성하기 위해 함수에 data를 설정합니다.

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");
},
};
});