我尝试使用Jekyll创建静态网站,并从Blogger导入内容。我想要做的其中一件事是拥有月度档案,我已经能够使用sample code I found成功生成:
module Jekyll
class ArchiveGenerator < Generator
safe true
def generate(site)
if site.layouts.key? 'archive_index'
site.posts.group_by{ |c| {"month" => c.date.month, "year" => c.date.year} }.each do |period, posts|
posts = posts.sort_by { |p| -p.date.to_f }
archive_dir = File.join(period["year"].to_s(), "%02d" % period["month"].to_s())
paginate(site, archive_dir, posts)
end
site.posts.group_by{ |c| {"year" => c.date.year} }.each do |period, posts|
posts = posts.sort_by { |p| -p.date.to_f }
archive_dir = period["year"].to_s()
paginate(site, archive_dir, posts)
end
end
end
def paginate(site, dir, posts)
pages = Pager.calculate_pages(posts, site.config['paginate'].to_i)
(1..pages).each do |num_page|
pager = Pager.new(site, num_page, posts, pages)
archive_path = "/" + dir
path = archive_path
if num_page > 1
path += "/page/#{num_page}"
end
newpage = ArchiveIndex.new(site, site.source, path, archive_path, posts)
newpage.pager = pager
site.pages << newpage
end
end
end
class ArchiveIndex < Page
def initialize(site, base, dir, base_path, posts)
@site = site
@base = base
@dir = dir
@name = 'index.html'
self.process(@name)
self.read_yaml(File.join(base, '_layouts'), 'archive_index.html')
self.data['base'] = base_path
end
end
end
我希望顶级index.html
文件是最近一个月有月份的月份档案。但是,我已尝试了各种方法将顶级目录指定为生成文件的目标,但未成功。这在Jekyll有可能吗?
答案 0 :(得分:0)
你甚至不需要用Ruby 编写的插件(你在问题中发布的代码是)来显示头版最近一个月的帖子。
在Liquid中执行此操作非常容易,这意味着它可以在GitHub页面上工作(问题中的代码不会,because it's a plugin):
<ul>
{% for post in site.posts %}
{% assign currentmonth = post.date | date: "%B %Y" %}
{% if prevmonth == null or currentmonth == prevmonth %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% else %}
{% break %}
{% endif %}
{% assign prevmonth = currentmonth %}
{% endfor %}
</ul>
简短说明:
post.date | date: "%B %Y"
将返回类似“2014年7月”的内容) prevmonth == null
)为空,因此我们将始终显示第一篇文章{% break %}
- 请注意{% break %}
wasn't supported in earlier Liquid versions) 如果你可以在一个页面上使用所有月份的月度档案,那么也可以在没有插件的情况下生成with a similar approach。