Фильтры

Фильтры используются для изменения указанных данных. Hexo передает данные для фильтров в определенной последовательности и фильтров изменения данных один за другим. Эта концепция была заимствована из 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);

Вы можете определить приоритет. Низкий приоритет означает, что он будет выполняться в первую очередь. Приоритет по умолчанию равен 10. Рекомендуется использовать настраиваемое пользователем значение приоритета, которое возможно указать в конфигурации, например hexo.config.your_plugin.priority.

Использование фильтров

hexo.extend.filter.exec(type, data, options);
hexo.extend.filter.execSync(type, data, options);
Опция Описание
context Контекст
args Аргументы. Должны быть в виде массива.

Первый аргумент, передаваемый в каждый фильтр, это data. Данные data, передаваемые в следующий фильтр, могут быть изменены путем возврата нового значения. Если же ничего не возвращается, данные остаются без изменений. Вы даже можете использовать аргументы, чтобы указать другие аргументы в фильтрах. Например:

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

Также можно использовать следующие методы для выполнения фильтров:

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

Отмена фильтров

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

Список фильтров

Здесь находится список фильтров, используемых в Hexo.

before_post_render

Выполняется перед началом обработки поста. См. post rendering для изучения этапов обработки.

Например, перевести название в нижний регистр:

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

after_post_render

Выполняется после завершения обработки поста. См. post rendering для изучения этапов выполнения.

Например, чтобы заменить @username ссылкой на профиль в Twitter:

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

Выполнится перед началом генерации.

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

after_generate

Выполнится после окончания генерации.

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

template_locals

Позволяет изменять локальные переменные в шаблонах.

Например, чтобы добавить переменную текущего времени в шаблон:

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

Выполняется при создании поста для определения пути постоянной ссылки.

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

after_render

Выполнится после завершения обработки. См. рендеринг для подробностей.

server_middleware

Добавляет промежуточные задачи для сервера. app является экземпляром Connect.

Например, чтобы добавить 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();
});
});