我是nanoc的新手,我仍然在找周围的人。我能够准备好我的网站,它看起来很好,功能也很好。但我需要一个标签区域。我能够用
实现这一目标<%= tags_for(post, params = {:base_url => "http://example.com/tag/"}) %>
但是如何为标签生成页面?因此,例如,有一个名为“NFL”的标签,因此每次用户点击它时,应该将他/她定向到http://example.com/tag/nfl
,其中包含与NFL相对应的文章列表。
我可以设置一个可以做到这一点的布局。但是我应该使用什么样的逻辑呢?我还需要帮忙吗?
答案 0 :(得分: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
最后,循环遍历所有标签并为其生成项目:
tags.each do |tag|
items << Nanoc::Item.new(
"",
{ :tag => tag },
"/tags/#{tag}/")
end
现在,您可以为/ tags / * /创建一个特定的编译规则,以便使用“tags”布局进行渲染,该布局将采用:tag属性的值,查找具有此标记并显示的所有项目他们在一个列表中。那个布局看起来有点像这样:
<h1><%= @item[:tag] %></h1>
<ul>
<% items_with_tag(@item[:tag]).each do |i| %>
<li><%= link_to i[:title], i %></li>
<% end %>
</ul>
而且,从广义上说,应该是你想要的!