2012-03-02 2 views
1

Использование nanoc создать страницу архива блога, я хотел бы, чтобы отобразить список, подобный тому, что показано на http://daringfireball.net/archive/Использование nanoc, чтобы создать список статей блога, отсортированных по месяцам и годам

Я впадающей проблемы, основанные на способе публикации статей в блоке 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» не определен.

ответ

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 %> 

Спасибо!

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 %> 

Я не проверял его, это суть.

+0

Большое спасибо за ответ (и за создание и поддержку такого классного веб-инструментария!). Я должен был уточнить, что я понимаю, как отображать результаты, я просто оставил их из приведенного выше кода ради краткости. Моя проблема с кодом в любом из приведенных выше примеров заключается в том, что я не могу заставить его дать мне результаты в первую очередь! Когда я пытаюсь скомпилировать, я получаю сообщение об ошибке «NoMethodError: undefined method' date »для # ". Поэтому я полагаю, что нанок должен хотеть другой метод анализа даты, но я понятия не имею, что это будет. Еще раз спасибо! – alt0

+0

Ahh, моя ошибка. a.date не будет работать; для доступа к атрибутам вам нужна [: дата]. Поскольку это строка, следует использовать Date.parse. Я обновил свой фрагмент кода. – ddfreyne