使用nanoc创建博客存档页面,我想显示一个与http://daringfireball.net/archive/
所示类似的列表我遇到的问题基于nanoc博客文章的日期。这是我尝试过的代码:
by_yearmonth = @site.sorted_articles.group_by{ |a| [a.date.year,a.date.month] }
by_yearmonth.keys.sort.each do |yearmonth|
articles_this_month = by_yearmonth[yearmonth]
# code here to display month and year
articles_this_month.each do |article|
# code here to display title of blog post
end
end
nanoc似乎不理解a.date.year或a.date.month - 当我尝试编译网站时,我收到一条错误,指出“date”方法未定义。
答案 0 :(得分:1)
更新:由于ddfreyne的一些重要指示,这里的代码最终正在运行:
# In lib/helpers/blogging.rb:
def grouped_articles
sorted_articles.group_by do |a|
[ Time.parse(a[:created_at]).year, Time.parse(a[:created_at]).month ]
end.sort.reverse
end
# In blog archive item:
<% grouped_articles.each do |yearmonth, articles_this_month| %>
<h2>Year <%= yearmonth.first %>, month <%= yearmonth.last %></h2>
<% articles_this_month.each do |article| %>
<h3><%= article[:title] %></h3>
<% end %>
<% end %>
谢谢!
答案 1 :(得分:0)
您的问题遗漏了一个问题。 :)
你快到了。我相信您正确粘贴的代码将文章分为年/月。现在你需要显示它们。您可以使用ERB或使用Haml(有些人更喜欢前者,有些人更喜欢后者)。例如,使用ERB:
# somewhere in lib/ (I propose lib/helpers/blogging.rb)
require 'date'
def grouped_articles
sorted_articles.group_by do |a|
[ Date.parse(a[:date].year, Date.parse(a[:date]).month ]
end.sort
end
# in your blog archive item
<% grouped_articles.each_pair do |yearmonth, articles_this_month| %>
<h1>Year <%= yearmonth.first %>, month <%= yearmonth.last %></h1>
<% articles_this_month.each do |article| %>
<h2><%= article[:title] %></h2>
<% end %>
<% end %>
我还没有测试过,这就是它的要点。