0

我正在为入门指南构建一个静态生成器,并将同一指南的页面分组到一个文件夹中。

如何在生成的页面底部为下一页和上一页添加页脚?

4

1 回答 1

1

Nanoc 中的页面(“项目”)没有内在顺序,因此没有“上一个”和“下一个”的概念,除非您添加一个。但是,有一些方法可以将排序引入项目列表:

  1. 按标题排序项目 ( @items.sort_by { |i| i[:title] })
  2. 按排序属性对项目进行排序 ( @items.sort_by { |i| i.fetch(:order, 0) })
  3. 在配置文件中定义排序(这就是nanoc.ws 的做法
  4. …</li>

一旦为项目集合定义了排序,您就可以使用它#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 助手,您可以自动确定当前部分的有序项目:

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

然后你会有一个指向上一页的链接。下一个链接类似。

于 2016-12-21T16:11:36.573 回答