2014-04-05 35 views
1

我想在我的Jekyll網站上按重量排序導航。我使用的是this plugin,但是我只想在導航中顯示帶重量的頁面,而不是在列表末尾顯示沒有重量的頁面。Jekyll中的導航按重量排序

所以我改變了這樣的插件:

module Jekyll 
    class WeightedPagesGenerator < Generator 
    safe true 
    def generate(site) 
     site.pages.each do |page| 
     if page.data["weight"] != nil 

      site.config['weighted_pages'] = site.pages.sort_by { |a| 
      a.data['weight'] } 

     end 
     end 
    end 
    end 
end 

但我得到一個錯誤:生成... /_plugins/sorted_navigation.rb:10:in`sort_by':2 NilClass的比較失敗(引發ArgumentError)。

任何想法如何使這項工作?

+0

在您的方法中嘗試此操作,site.config ['weighted_pa​​ges'] = site.pages.sort_by {| a | a.data ['weight']。to_i} –

+0

您可以替換此區塊site.pages.each do | page | if page.data [「weight」]!= nil site.config ['weighted_pa​​ges'] = site.pages.sort_by {| a | a.data ['weight']} end end –

+0

with site.config ['weighted_pa​​ges'] = site.pages.sort_by {| a | a.data ['weight']。to_i} –

回答

1

由於傑奇2.2.0您可以通過任何物體屬性進行排序對象的數組。現在可以按重量進行排序,並且比以前的解決方案效率高得多(請參閱https://stackoverflow.com/a/25513956/1548376

+0

非常感謝!我已經在我的網站上使用它。 – jupiteror

+0

嗨,非常感謝。有什麼辦法可以按順序排序帖子而不是頁面? – jupiteror

+2

'{%assign posts = site.posts |排序:「權重」%}'或按名稱或任何你想在前面的問題排序。 –

0

我最終沒有使用這個插件。相反,我用液體標籤從this answer,現在我的導航看起來是這樣的:

<nav> 
    <ul> 
    {% for weight in (1..5) %} 
     {% unless p.weight %} 
     {% for p in site.pages %} 
      {% if p.weight == weight %} 
      <li><a {% if p.url == page.url %}class="active"{% endif %} href="{{ p.url }}" title="{{ p.title }}">{{ p.title }}</a></li> 
      {% endif %} 
     {% endfor %} 
     {% endunless %} 
    {% endfor %} 
    </ul> 
</nav>