过滤器(Filter)
过滤器分注册和执行两个函数
注册过滤器的function参数可以是多个,如果是hexo钩子 那么data的值与page一致
执行过滤器的第二个参数为带入值data,第三个值是args
以下是官网的一个小demo 讲的还是比较清晰的
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']
});
小例子1
如果data.content里面有#fn,那么插入一个js
hexo.extend.filter.register('after_post_render',function(data){
if(data.content.indexOf("#fn") != -1){
data.content += "<script src=\"js/footnote.js\" type=\"text/javascript\"></script>";
}
return data;
});
小例子2
选择性生成css或js
比如,我在主题的source/js文件夹下放了duoshuo.min.js这个多说本地化脚本,当设置里没启用多说的时候这个js文件还是会跟着生成,跟着发布到你的博客服务器上,浪费流量。该怎么办呢?
把如下js放进主题的scripts文件夹下(文件名随意):
'use strict';
hexo.extend.filter.register('after_generate',function(){
var duoshuo = hexo.theme.config.duoshuo_shortname;
if(!duoshuo || duoshuo.length == 0){
hexo.route.remove('js/duoshuo.min.js');
}
});
其中duoshuo_shortname是主题设置里的一个条目。
这样,当duoshuo_shortname为空时,duoshuo.min.js不会跟着生成,从而减少所需加载量。