2016-08-24 75 views
0

我正在嘗試創建導航到集合中上一頁/下一頁的左/右箭頭鏈接。這是很容易實現的標準收取:如何分頁排序的Jekyll集合?

{% if page.previous %} 
    <a href="{{ page.previous.url }}>Left arrow</a> 
{% endif %} 
{% if page.next %} 
    <a href="{{ page.next.url }}>Right arrow</a> 
{% endif %} 

我的問題是,這只是通過文件的順序收集週期。我需要使用frontmatter變量(position)爲頁面指定特定的順序。

我已經搜索了很多,但所有的信息與排序似乎適用於網站導航,而不是分頁。看起來我需要在將已排序的集合分配給一個變量後使用循環液體。我正努力使page.previouspage.next變量在此循環中工作。

我已經嘗試依次通過分類收集,只有當輸出的文檔的URL的當前頁面匹配的導航箭頭在文件中,但似乎並沒有工作:

{% assign sorted_collection site.collection | sort: "position" %} 

{% for document in sorted_collection %} 

    {% if document.url == page.url %} 

    {% if document.previous %} 
     <a href="{{ document.previous.url }}>Left arrow</a> 
    {% endif %} 

    {% if document.next %} 
     <a href="{{ document.next.url }}>Right arrow</a> 
    {% endif %} 

    {% endif %} 

{% endfor %} 

上午我在我的液體語法中缺少一些東西,或者我在這裏完全按照我的邏輯走錯了路線?

我目前的黑客解決方案是用數字前綴文檔文件名,以確保默認情況下它們的順序是正確的。然而,當我將網站交給網站時,這是行不通的,因爲我無法相信非技術性內容創作者保持文件名的順序。

回答

0

我剛剛發現並測試瞭解決方案suggested here,它的工作原理!我認爲訣竅在於捕獲集合名稱並將其作爲字符串分配給變量。

有沒有人有這樣做的更好/較少詳細的方式?

2

您鏈接的技術幾乎是我在集合中使用的下一個/上一個。如果鏈接過時,這裏有一個類似的片段可以保存收集項目對象,而不僅僅是URL:

{% if page.collection %} 
    {% assign collection = site[page.collection] | sort: 'position' %} 
    {% assign prev = collection | last %} 
    {% assign next = collection | first %} 

    {% for item in collection %} 
    {% if item.title == page.title %} 
     {% unless forloop.first %} 
     {% assign prev = iterator %} 
     {% endunless %} 

     {% unless forloop.last %} 
     {% assign next = collection[forloop.index] %} 
     {% endunless %} 
    {% endif %} 

    {% assign iterator = item %} 
    {% endfor %} 
{% endif %} 

{% if prev %} 
    <a href="{{ prev.url }}">{{ prev.title }}</a> 
{% endif %} 

{% if next %} 
    <a href="{{ next.url }}">{{ next.title }}</a> 
{% endif %}