Ответ 1
Вы можете использовать блок препроцесса в вашем файле 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/ */, чтобы оно отображалось с использованием макета "теги", в котором будет приниматься значение атрибута: tag, найти все элементы с этим тегом и показать их в списке. Этот макет будет выглядеть примерно так:
<h1><%= @item[:tag] %></h1>
<ul>
<% items_with_tag(@item[:tag]).each do |i| %>
<li><%= link_to i[:title], i %></li>
<% end %>
</ul>
И что, в широких мазках, должно быть то, что вы хотите!