2012-03-02 4 views
1

블로그 아카이브 페이지를 만들 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을 이해하지 않는 것 - 내가 사이트를 컴파일 할 때, 나는 오류가 말하는 얻을 "날짜"메서드는 정의되지 않았습니다.

답변

1

업데이트 :

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

감사 : 여기 ddfreyne에서 몇 가지 중요한 방향에, 덕분에 작업 결국 코드입니다!

0

질문이 누락되었습니다. :)

거의 다 왔어. 내가 붙여 넣은 코드가 기사를 1 년/1 개월로 올바르게 나눕니다. 이제 그들을 표시해야합니다. 당신은 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 %> 

나는 그것을 테스트하지 않은, BU 그것의 요점입니다.

+0

대단히 감사합니다. 멋진 웹 저작 도구를 만들고 지원해 주셔서 감사합니다. 내가 결과를 표시하는 방법을 이해했다는 것을 분명히 했어야했다. 나는 간결함을 위해서 위의 코드를 남겨 두었다. 위의 예제 중 하나에있는 코드의 문제점은 처음부터 결과를 얻을 수 없다는 것입니다. 컴파일하려고하면 "NoMethodError : # "에 대해 날짜가 정의되지 않았습니다. "라는 오류 메시지가 나타납니다. 그래서 나는 nanoc이 날짜를 파싱하는 다른 방법을 원해야한다는 것을 알았지 만, 그것이 무엇이 될지 전혀 모른다. 다시 한 번 감사드립니다! – alt0

+0

아, 내 실수. a.date는 작동하지 않습니다. 속성에 액세스하려면 [: 날짜]가 필요합니다. 문자열이므로 Date.parse를 사용해야합니다. 코드 스 니펫을 업데이트했습니다. – ddfreyne