過濾器(Filter)
過濾器分注冊和執(zhí)行兩個函數(shù)
注冊過濾器的function參數(shù)可以是多個,如果是hexo鉤子 那么data的值與page一致
執(zhí)行過濾器的第二個參數(shù)為帶入值data,第三個值是args
以下是官網(wǎng)的一個小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這個多說本地化腳本,當(dāng)設(shè)置里沒啟用多說的時候這個js文件還是會跟著生成,跟著發(fā)布到你的博客服務(wù)器上,浪費流量。該怎么辦呢?
把如下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是主題設(shè)置里的一個條目。
這樣,當(dāng)duoshuo_shortname為空時,duoshuo.min.js不會跟著生成,從而減少所需加載量。