我正在尝试使用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
目录之外生成类别页面?
答案 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脚本来自动化此步骤。