在nanoc中相同文件夹中的页面的下一个和上一个按钮

时间:2016-12-02 10:03:56

标签: nanoc

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 按标题(@items.sort_by { |i| i[:title] }
  2. 对项目进行排序
  3. 按订购属性(@items.sort_by { |i| i.fetch(:order, 0) }
  4. 对项目进行排序
  5. 在配置文件中定义排序(这是how nanoc.ws does it
  6. ...
  7. 一旦为一组项目定义了一个排序,您就可以使用#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 %>
    

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