生成器(Generator)

  1. 概要
  2. 更新路由
  3. 范例
    1. 归档页面
    2. 有分页的归档页面
    3. 生成所有文章
    4. 复制文件

生成器根据处理后的原始文件建立路由。

概要

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

在函数中会传入一个 locals 参数,等同于 网站变量,请尽量利用此参数取得网站数据,避免直接存取资料库。

更新路由

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 布局。指定用于渲染的模板,可为字符串或数组,如果省略此属性的话则会直接输出 data

在原始文件更新时,Hexo 会执行所有生成器并重建路由,请直接回传资料,不要直接操作路由

范例

归档页面

archives/index.html 建立一归档页面,把所有文章当作资料传入模板内,这个资料也就等同于模板中的 page 变量。

然后,设置 layout 属性好让 Hexo 使用主题模板来渲染,在此例中同时设定了两个布局,当 archive 布局不存在时,会继续尝试 index 布局。

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

有分页的归档页面

您可以通过 hexo-pagination 这个方便的官方工具来轻松建立分页归档。

var pagination = require('hexo-pagination');

hexo.extend.generator.register('archive', function(locals){
  return pagination('archives/index.html', locals.posts, {
    perPage: 10,
    layout: ['archive', 'index'],
    data: {}
  });
});

生成所有文章

遍历 locals.posts 中的所有文章并生成所有文章的路由。

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

复制文件

这次不直接在 data 中返回数据而是返回一个函数,如此一来这个路由唯有在使用时才会建立 fs.ReadStream

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')
    }
  };
});

文章标题:生成器(Generator)

文章字数:471

本文作者:牵猪的仓鼠

发布时间:2017-03-12, 19:35:02

最后更新:2017-03-13, 22:12:36

原始链接:http://s.amlove.cn/2017/03/12/hexo/api/generator/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录

喜欢就点赞,疼爱就打赏