在针对github页面的jekyll中生成类别页面

时间:2018-06-23 19:17:01

标签: jekyll github-pages

我正在尝试使用jekyll为我的github页面博客生成类别页面。当我使用jekyll serve在本地运行时,此方法有效,因为它可以使用我的插件。

使用此示例from the docs不起作用,因为github不会生成自定义插件:

module Jekyll
  class CategoryPage < Page
    def initialize(site, base, dir, category)
      @site = site
      @base = base
      @dir = dir
      @name = 'index.html'

      self.process(@name)
      self.read_yaml(File.join(base, '_layouts'), 'category_index.html')
      self.data['category'] = category

      category_title_prefix = site.config['category_title_prefix'] || 'Category: '
      self.data['title'] = "#{category_title_prefix}#{category}"
    end
  end

  class CategoryPageGenerator < Generator
    safe true

    def generate(site)
      if site.layouts.key? 'category_index'
        dir = site.config['category_dir'] || 'categories'
        site.categories.each_key do |category|
          site.pages << CategoryPage.new(site, site.source, File.join(dir, category), category)
        end
      end
    end
  end
end

但是,如果我可以生成不在_site目录中的自己的页面,那将起作用。然后,即使它们是系统生成的,我也会将它们检入为“常规”页面。

是否可以使用jekyll在_site目录之外生成类别页面?

1 个答案:

答案 0 :(得分:1)

A)。您可以编写自定义脚本(shell或Ruby或其他内容)以使用file I/O operations 在任何地方生成文件。在上面的示例中,无需添加站点上的新页面,您可以将具有前题的文件写到项目目录中。例如(Ruby):

open('somepath/#{category}/index.html', 'w') { |f|
  f << "---\n"
  f << "key: #{variable}\n"
  f << "---\n"
}

当然,您必须在本地运行它,然后再将项目推送到GitHub。


B),或者您可以在本地渲染Jekyll网站,然后仅将_site内容推送到GitHub。然后,您可以使用所需的任何插件。您必须在GitHub上的bypass Jekyll processing的项目根目录中创建一个.nojekyll文件,并且还必须将其添加到Jekyll的include中(在_config.yml中):

include: - .nojekyll

然后,您可以呈现站点(jekyll build)并_site目录的内容推送到GitHub。您可以使用一个小的Shell脚本来自动化此步骤。