在 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 然后为 next 和 previous 链接添加和减去 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/
我知道{{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 然后为 next 和 previous 链接添加和减去 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/