2016-12-02 5 views

答えて

1

Nanocのページ(「アイテム」)には固有の順序がありません。追加する場合を除いて、「前」および「次」の概念はありません。項目のリストに順序を導入する方法は、しかし、があります。発注属性によって

  1. タイトルで並べ替えアイテム(@items.sort_by { |i| i[:title] }
  2. ソート項目(@items.sort_by { |i| i.fetch(:order, 0) }
  3. で順序を定義します。設定ファイル(これはhow nanoc.ws does itある)
  4. ...

使用できるアイテムの収集のために定義された順序は、存在したら、#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 

、場合は、

のような実装を持つことができます ChildParent helper
def ordered_items_for_manual 
    @items.find_all('/manual/**/*') 
    .select { |i| i.key?(:order) } 
    .sort_by { |i| i[:order] } 
end 

、あなたは自動的に現在のセクションのために注文した商品を決定することができる:

def ordered_siblings_and_self 
    children_of(parent_of(@item)) 
    .select { |i| i.key?(:order) } 
    .sort_by { |i| i[:order] } 
end 

最後に、フッターに(例えばデフォルトのレイアウトで)、yは

<% if previous_item %> 
    <%= link_to(previous_item[:title], previous_item) %> 
<% end %> 

のようなものを貼り付けてから、前のページへのリンクがあります。次のリンクと同様です。

関連する問題