2012-12-13 2 views
10

나는 nanoc을 처음 사용하고 있으며 아직 주위를 찾고 있습니다. 나는 내 사이트를 준비 할 수 있고,보기 좋고 기능도 좋다. 하지만 태그 영역이 필요합니다. 나는 그것을 달성 할 수있다nanoc의 각 태그에 대한 페이지를 생성하는 방법

<%= tags_for(post, params = {:base_url => "http://example.com/tag/"}) %> 

그러나 어떻게 태그를위한 페이지를 생성합니까? 예를 들어 "NFL"이라는 태그가 있기 때문에 사용자가 클릭 할 때마다 NFL에 해당하는 기사 목록이 포함 된 http://example.com/tag/nfl으로 이동해야합니다.

내가 할 수있는 레이아웃을 설정할 수 있습니다. 그런데 어떤 논리를 사용해야합니까? 그리고 이것에 도우미가 필요합니까?

답변

21

Rules 파일에 사전 처리 블록을 사용하여 새 항목을 동적으로 생성 할 수 있습니다. 여기에 하나의 새로운 항목이 추가되는 전처리 블록의 예 : 각 태그에 대한 페이지를 원하는 경우

preprocess do 
    items << Nanoc::Item.new(
    "some content here", 
    { :attributes => 'here', :awesomeness => 5000 }, 
    "/identifier/of/this/item") 
end 

는 먼저 모든 태그를 수집해야합니다. 그들을 위해

require 'set' 
tags = Set.new 
items.each do |item| 
    item[:tags].each { |t| tags.add(t.downcase) } 
end 

마지막으로, 모든 태그를 통해 루프를하고 생성 항목 : I 중복 싶지 않기 때문에 나는 세트와 함께이 일을하고있어 지금

tags.each do |tag| 
    items << Nanoc::Item.new(
    "", 
    { :tag => tag }, 
    "/tags/#{tag}/") 
end 

을 특정 컴파일 규칙을 만들 수 있습니다/tags/* /에 대해, : 태그 속성의 값을 취하고이 태그가있는 모든 항목을 찾아 목록에 표시하는 "tags"레이아웃을 사용하여 렌더링되도록합니다. 해당 레이아웃은 다음과 같이 표시됩니다.

<h1><%= @item[:tag] %></h1> 
<ul> 
    <% items_with_tag(@item[:tag]).each do |i| %> 
    <li><%= link_to i[:title], i %></li> 
    <% end %> 
</ul> 

그리고 넓은 스트로크에서 원하는대로해야합니다.

+0

대단히 감사합니다. :) – user1758162

+5

일관성없는 태그를 정규화하면 여기에 "중복"이 생깁니다 ... 대소 문자를 구분하지 않는 파일 시스템을 사용하면 혼란이 생길 ​​수 있습니다 선. 'tag.downcase' 또는 뭔가 먼저 들러서 두통을 피하십시오. – bobthecow

+0

이것은 훌륭한 대답입니다. 문서에 나와 있습니다 @ddfreyne;). –

관련 문제