我为我的Jekyll网站编写了一个Hook,它从我的.json
目录中获取_data
文件,从其内容创建一堆.md
个文件,并将它们存储在{ {1}}。
问题是,当Jekyll执行此Hook时,它已完成阅读_collection
,因此新的或更新的文件不会进入_collection
。
所以:我想我需要一种让Hekyll在Hook运行后重新读取_site
的方法。因此,在渲染之前更新_collection
中的必要文件。
_site
我认为jekyll::Hooks.register :site, :post_read do |site|
if site.data.has_key? 'projects'
site.data['projects'].each do |project|
File.open("./_projects/#{file_name}.md") do |file|
# A bunch of YAML Front-Matter written to file.
end
end
end
end
早在Hook可以运行时就已存在。任何早期的:post_read
都是空的。
我已经尝试过site.data
,但同样的问题出现在 "Generators run after Jekyll has made an inventory of the existing content" 。
我知道我可以将文件直接输出到Generator
,但有几个原因我不想这样做。
_site
与.md
Front-Matter一起输出到YAML
我可以让Jekyll进行转换并渲染为html。这看起来很实用,因为这就是Jekyll的用途。_collection
,因此将这些文件存储在_site
中时,它们会一直存在。只是意味着_collection
文件不存在或什么都没有。
.json
。只是加入相关内容:
_site
文件都会自动从Google电子表格中更新。然后每当.json
文件发生更改时,Jekyll都需要更新网站(从而运行Hook)。虽然我确信Jekyll会有一个方法,但我现在已经实施了一种解决方法。
.json
答案 0 :(得分:0)
---以下只是一个想法,未经测试。 ---
如何在所有"项目"之后初始化新的Jekyll::Collection
实例。 documents
已被写入?
Jekyll::Hooks.register :site, :post_read do |site|
if site.data.has_key? 'projects'
site.data['projects'].each do |project|
File.open("./_projects/#{file_name}.md") do |file|
# A bunch of YAML Front-Matter written to file.
end
end
# Re-read collections in this site
Jekyll::CollectionReader.new(site).read
end
end