Использование Nanoc для создания списка статей блога, отсортированных по месяцам и годам
Используя 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 не определен.
2 ответа
Обновление: вот код, который закончил работать, благодаря некоторому важному руководству от 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 %>
Спасибо!
В вашем вопросе отсутствует вопрос.:)
Вы почти там. Я считаю, что код, который вы вставили правильно, делит статьи на год / месяц. Теперь вам нужно отобразить их. Вы можете сделать это с помощью 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 %>
Я не проверял это, но это суть этого.