在 Jekyll RB 和 GH 页面中,显示下一页和上一页(不是 Post)

in Jekyll RB & GH Pages, Displaying a next and previous Page (Not Post)

我知道{{page.previous.url}} 和 {{page.next.url}} 可用于帖子,但不幸的是,我在我的博客上使用这些项目页面的页面结构。

在每个项目结束时,我希望有一个页脚

 [ < - Previous Project (if available)]  [ Home ]  [  Next Project -> (if available) ] 

文档结构

root
-- project1/
  - /img
  - /index.md
-- project2/
  - /img
  - /index.md
-- project3/
  - /img
  - /index.md
index.html

在没有任何插件的情况下使用 Jekyll 是否可行?

更新

因为您所在的当前页面没有可用的 "index",我想我将不得不遍历 site.pages,将 site.page.title 与page.title 然后为 nextprevious 链接添加和减去 forloop.index。

这是唯一的方法还是我过于复杂了?

下面我所想的示例代码:

{% for entry in site.pages %}
        {% if entry.title == page.title %}
            index is: {{ forloop.index }} <br />

            sites.pages is {{ site.pages[forloop.index].url }} <br />
            {% assign prev = forloop.index | minus:1 %}
            {% assign next = forloop.index | plus:1 %}

            {% assign prevUrl = site.pages[prev].url %}
            {% assign nextvUrl = site.pages[next].url %}

            {% assign currentURL = site.pages[forloop.index].url %}

            previous page is: <em>{{ prevUrl }}</em> <br />
            current page is: <em>{{ currentUrl }}</em> <br />
            next page is: <em>{{ nextUrl }}</em>
        {% endif %}
    {% endfor %}

编辑 2

JoostS 的回答是我需要的起点。我继续并包含了我的代码,因为我需要的与他们的有点不同(main.css 被包含在循环中,以及其他几个本不应该包含在循环中的页面)。非常感谢您的帮助!

使用仅项目页面构建数组

{% assign sorted_pages2 = site.pages %}

{% assign sorted_pages = "" | split: ""  %}
{% for item in sorted_pages2 %}
    {% if item.type == "project" %}
        {% assign sorted_pages = sorted_pages | push: item %}
    {% endif %}
{% endfor %}

{% for item in sorted_pages %}
    {% if item.url == page.url %}
        {% assign this_i = forloop.index0 %}
        {% assign num_of_pages = forloop.length %}
        {% assign last_i = forloop.length | minus: 1 %}
        {% assign next_i = forloop.index0 | plus: 1 %}
        {% assign prev_i = forloop.index0 | minus: 1 %}
    {% endif %}
{% endfor %}

有条件地显示下一个和上一个

<div class="flex f-row project-footer">
        <div>
                {% if prev_i < 0 %}
                    <!-- Sorted_Last{{ sorted_pages[last_i].url }} -->
                {% else %}
                    <a href="{{ sorted_pages[prev_i].url }}">
                         <span>Previous Project</span>
                    </a>
            {% endif %}
        </div>
        <div>
            <a href="/">
                  <span>Home</span>
            </a>
        </div>
        <div>
            {% if num_of_pages > next_i %}
                <a href="{{ sorted_pages[next_i].url }}">
                    <span>Next Project</span> 
                </a>
            {% endif %}
        </div>
    </div>

最终结果

这是我在网站中使用的代码:

{% if page.layout != 'post' %}
{% assign sorted_pages2 = site.pages | sort: 'order' %}
{% else %}
{% assign sorted_pages2 = site.posts reversed %}
{% endif %}

{% assign sorted_pages = "" | split: ""  %}
{% for item in sorted_pages2 %}
    {% if item.url != "/404.html" %}    
        {% assign sorted_pages = sorted_pages | push: item %}
    {% endif %} 
{% endfor %}

{% for item in sorted_pages %}
    {% if item.url == page.url %}
        {% assign this_i = forloop.index0 %}
        {% assign num_of_pages = forloop.length %}
        {% assign last_i = forloop.length | minus: 1 %}
        {% assign next_i = forloop.index0 | plus: 1 %}
        {% assign prev_i = forloop.index0 | minus: 1 %}
    {% endif %}
{% endfor %}

然后:

function next() {
    document.location.href='{% if num_of_pages > next_i %}{{ sorted_pages[next_i].url }}{% else %}{{ sorted_pages[0].url }}{% endif %}';
}
function prev() {
    document.location.href='{% if prev_i < 0 %}{{ sorted_pages[last_i].url }}{% else %}{{ sorted_pages[prev_i].url }}{% endif %}';
}

这将循环遍历页面或遍历 post。参见:http://www.usecue.com/