nanoc 中同一文件夹中页面的下一个和上一个按钮
Next and Prev buttons for pages in the same folder in nanoc
我正在为入门指南构建静态生成器,并将同一指南的页面分组到一个文件夹中。
如何在生成的下一页和上一页的页面底部添加页脚?
Nanoc 中的页面(“项目”)没有内在的顺序,因此没有“上一个”和“下一个”的概念,除非你添加一个。不过,有一些方法可以对项目列表进行排序:
- 按标题排序项目(
@items.sort_by { |i| i[:title] }
)
- 按排序属性对项目进行排序 (
@items.sort_by { |i| i.fetch(:order, 0) }
)
- 在配置文件中定义顺序(这是 how nanoc.ws does it)
- …
一旦为 collection 项定义了排序,您可以使用 #index
找出当前页面的索引,从而找到上一页和下一页的索引.例如,假设 ordered_items
是有序项目列表:
def previous_item(item)
idx = ordered_items.index(item)
if idx && idx > 0
ordered_items[idx - 1]
end
end
#next_item
函数类似。
如何实现#ordered_items
功能,取决于你想实现什么。您要订购网站上的所有商品吗?如果是这样,实现可能如下所示:
def ordered_items
@items.select { |i| i.key?(:order) }.sort_by { |i| i[:order] }
end
另一方面,如果您希望将订购的商品限定在网站的某个部分,您可以采用类似
的实现
def ordered_items_for_manual
@items.find_all('/manual/**/*')
.select { |i| i.key?(:order) }
.sort_by { |i| i[:order] }
end
使用ChildParent helper,您可以自动确定当前部分的订购项目:
def ordered_siblings_and_self
children_of(parent_of(@item))
.select { |i| i.key?(:order) }
.sort_by { |i| i[:order] }
end
最后,在页脚中(例如在默认布局中),您可以粘贴类似
的内容
<% if previous_item %>
<%= link_to(previous_item[:title], previous_item) %>
<% end %>
然后你会 link 到上一页。类似下一个link.
我正在为入门指南构建静态生成器,并将同一指南的页面分组到一个文件夹中。
如何在生成的下一页和上一页的页面底部添加页脚?
Nanoc 中的页面(“项目”)没有内在的顺序,因此没有“上一个”和“下一个”的概念,除非你添加一个。不过,有一些方法可以对项目列表进行排序:
- 按标题排序项目(
@items.sort_by { |i| i[:title] }
) - 按排序属性对项目进行排序 (
@items.sort_by { |i| i.fetch(:order, 0) }
) - 在配置文件中定义顺序(这是 how nanoc.ws does it)
- …
一旦为 collection 项定义了排序,您可以使用 #index
找出当前页面的索引,从而找到上一页和下一页的索引.例如,假设 ordered_items
是有序项目列表:
def previous_item(item)
idx = ordered_items.index(item)
if idx && idx > 0
ordered_items[idx - 1]
end
end
#next_item
函数类似。
如何实现#ordered_items
功能,取决于你想实现什么。您要订购网站上的所有商品吗?如果是这样,实现可能如下所示:
def ordered_items
@items.select { |i| i.key?(:order) }.sort_by { |i| i[:order] }
end
另一方面,如果您希望将订购的商品限定在网站的某个部分,您可以采用类似
的实现def ordered_items_for_manual
@items.find_all('/manual/**/*')
.select { |i| i.key?(:order) }
.sort_by { |i| i[:order] }
end
使用ChildParent helper,您可以自动确定当前部分的订购项目:
def ordered_siblings_and_self
children_of(parent_of(@item))
.select { |i| i.key?(:order) }
.sort_by { |i| i[:order] }
end
最后,在页脚中(例如在默认布局中),您可以粘贴类似
的内容<% if previous_item %>
<%= link_to(previous_item[:title], previous_item) %>
<% end %>
然后你会 link 到上一页。类似下一个link.