2017-03-26 29 views
2

我有一大堆的集合中的文檔頁面,它們都具有一個類別,這我就用group_by過濾器,像這樣:傑基爾分組和排序收藏按類別和優先

{% assign docs_by_category = site.documentation | group_by: "category" %} 

然後我用這些分組創建菜單結構,其中每個類別的項目都列在標題下。這很好。

但是,我的問題在於,能夠排序,首先顯示哪個類別,所以我想能夠以某種方式優先考慮它們。

說,如果我有以下類別:tutorials, getting started, advanced。我不想advanced作爲第一類顯示,而是getting started

生成菜單當前的代碼看起來類似:

{% assign navurl = page.url | remove: 'index.html' %} 
{% assign docs_by_category = site.documentation | group_by: "category" | reverse %} 

{% for category in docs_by_category %} 
    <div class="category_wrapper"> 
    <div class="category">{{ category.name }}</div> 
    <ul> 
    {% for item in category.items %} 
     <li class="collapsed"> 
      <a href="{{ site.baseurl }}{{ item.url }}"> 
      {% if item.url == navurl %} 
      <u>{{ item.title }}</u> 
      {% else %} 
      {{ item.title }} 
      {% endif %} 
      </a> 
     </li> 
    {% endfor %} 
    </ul> 
    </div> 
{% endfor %} 

TL; DR:我如何通過某種優先級進行排序的羣體?

回答

4

您可以使用配置陣列來存儲類別排序:

# _config.yml 
categories-order: 
- getting started 
- tutorials 
- advanced 

然後:

{% assign docs_by_category = site.documentation | group_by: "category" %} 
{% for cat in site.categories-order %} 
    {% assign currentCat = docs_by_category | where: 'name', cat | first %} 
    <div class="category_wrapper"> 
    <div class="category">{{ currentCat.name }}</div> 
    <ul> 
    {% for item in currentCat.items %} 
     <li class="collapsed"> 
     <a href="{{ site.baseurl }}{{ item.url }}"> 
     {% if item.url == navurl %} 
      <u>{{ item.title }}</u> 
     {% else %} 
      {{ item.title }} 
     {% endif %} 
     </a> 
     </li> 
    {% endfor %} 
    </ul> 
    </div> 
{% endfor %} 

這意味着你引用你的類別在您的配置,否則,他們將不會出現在此列表。

+0

謝謝大衛,我會看看這個,看看它是如何工作的。我想這可能會以某種方式被修改爲優先級最初的迭代組,然後按照它們進來的順序休息。可能需要兩個循環,但我認爲這是可行的。 – Cheesebaron