Filter

Filter는 특정한 데이터를 수정할 때 사용합니다. Hexo는 데이터를 filter로 순차적으로 전달하고 filter들은 교대로 데이터를 수정할 수 있습니다. 이 컨셉은 WordPress에서 차용하였습니다.

개요

hexo.extend.filter.register(type, function() {
// User configuration
const { config } = this;
if (config.external_link.enable) // do something...

// Theme configuration
const { config: themeCfg } = this.theme;
if (themeCfg.fancybox) // do something...

}, priority);

당신은 priority을 정의할 수 있습니다. Lower priority means that it will be executed first. The default priority is 10. We recommend using user-configurable priority value that user can specify in the config, e.g. hexo.config.your_plugin.priority.

Filter의 실행

hexo.extend.filter.exec(type, data, options);
hexo.extend.filter.execSync(type, data, options);
옵션 설명
context Context
args 인자. 이 값은 배열(array)입니다.

Filter의 첫 번째 인자는 data 입니다. 다음 filter로 전달 된 data는 새 값으로 변경되어 반환될 수 있습니다. 아무런 값도 반환되지 않았다면 data의 값이 변경되지 않았다는 의미입니다. Filter의 다른 인자를 지정하기 위해 args를 사용할 수도 있습니다. 아래 예시를 봐주세요.

hexo.extend.filter.register("test", function (data, arg1, arg2) {
// data === 'some data'
// arg1 === 'foo'
// arg2 === 'bar'

return "something";
});

hexo.extend.filter.register("test", function (data, arg1, arg2) {
// data === 'something'
});

hexo.extend.filter.exec("test", "some data", {
args: ["foo", "bar"],
});

Filter를 실행하기 위해 아래 메소드들을 사용할 수도 있습니다.

hexo.execFilter(type, data, options);
hexo.execFilterSync(type, data, options);

Filter의 등록 해제

hexo.extend.filter.unregister(type, filter);

Example

// Unregister a filter which is registered with named function

const filterFn = (data) => {
data = "something";
return data;
};
hexo.extend.filter.register("example", filterFn);

hexo.extend.filter.unregister("example", filterFn);
// Unregister a filter which is registered with commonjs module

hexo.extend.filter.register("example", require("path/to/filter"));

hexo.extend.filter.unregister("example", require("path/to/filter"));

Filter 목록

Hexo에서 사용하는 filter의 목록은 아래와 같습니다.

before_post_render

Post가 생성되기 전에 실행됩니다. 실행 단계에 대해 더 알아보시길 원한다면 post rendering를 참조해 주세요.

아래 예시는 title을 소문자로 변경하는 것을 보여줍니다.

hexo.extend.filter.register("before_post_render", function (data) {
data.title = data.title.toLowerCase();
return data;
});

after_post_render

렌더링이 완료된 후 실행됩니다. Rendering에서 더 많은 정보를 확인하실 수 있습니다.

아래 예시는 @username을 Twitter link로 대체하는 것을 보여줍니다.

hexo.extend.filter.register("after_post_render", function (data) {
data.content = data.content.replace(
/@(\d+)/,
'<a href="http://twitter.com/$1">#$1</a>',
);
return data;
});

before_exit

Hexo가 종료되기 전에 실행됩니다. – hexo.exit가 호출되는 즉시 실행됩니다.

hexo.extend.filter.register("before_exit", function () {
// ...
});

before_generate

생성(generation)이 시작되기 전에 실행됩니다.

hexo.extend.filter.register("before_generate", function () {
// ...
});

after_generate

생성(generation)이 끝난 후에 실행됩니다.

hexo.extend.filter.register("after_generate", function () {
// ...
});

template_locals

템플릿에서 지역 변수(Local variables)를 수정합니다.

아래 예시는 템플릿의 지역 변수에 현재 시간을 추가합니다.

hexo.extend.filter.register("template_locals", function (locals) {
locals.now = Date.now();
return locals;
});

after_init

Hexo가 초기화 작업이 완료된 후 실행됩니다. – hexo.init이 완료되는 즉시 실행됩니다.

hexo.extend.filter.register("after_init", function () {
// ...
});

new_post_path

새로운 포스트가 생성될 때 포스트의 경로를 결정하기 위해 실행됩니다.

hexo.extend.filter.register("new_post_path", function (data, replace) {
// ...
});

post_permalink

Post의 permalink를 결정하기 위해 사용합니다.

hexo.extend.filter.register("post_permalink", function (data) {
// ...
});

after_render

Executed after a post is rendered. 실행 단계에 대해 더 알아보시길 원한다면 post rendering를 참조해 주세요.

after_clean

Executed after generated files and cache are removed with hexo clean command.

hexo.extend.filter.register("after_clean", function () {
// remove some other temporary files
});

server_middleware

서버에 미들웨어를 추가합니다. appConnect 인스턴스입니다.

아래 예시는 response header에 X-Powered-By: Hexo를 추가합니다.

hexo.extend.filter.register("server_middleware", function (app) {
app.use(function (req, res, next) {
res.setHeader("X-Powered-By", "Hexo");
next();
});
});