在建立自己的网站时,我也遇到了这个问题,并找到了一个(在我看来)简单且强大的解决方案。
给定站点上的一个页面子集(不是文章),按其类别在标题下列出它们。例如:给定我们认为是“资源”页面的一组页面(或参考页面,或您想要显示的任何逻辑分组的页面),我们希望将它们列在它们的类别下面(例如 代码、解释等)。
为了获得我们想要的行为,我们必须在三个地方进行修改:
_config.yml
resources.md
resource-file-X.md
_config.yml
在_config.yml
中,我们必须添加一个列表,其中包含所有将出现在资源文件中的类别/关键字/标签(或您想要称之为的任何内容)。以下是我的配置示例:
category-list: [code, editors, math, unix]
变量名可以随意定义,我选择了category-list
,但请确保在resource.md
文件中使用相同的变量名。
注意:在列表中放置项目的顺序就是它们将在resource.md
页面上列出的顺序。
resource-file-X.md
这些是您想要在resources.md
页面上索引和链接的文件。您只需要在每个文件的顶部添加两个文件变量即可。第一个是指示此文件是资源文件。
resource: true
第二个步骤是指定您希望将此文件归类为哪些类别。您可以将其归类为尽可能多的类别,如果您想让某个页面未被索引,请留下空白列表。我在C语言中处理EINTR时的参考资料具有以下类别:
categories: [code, unix]
资源.md
这个文件将会根据它们各自的类别生成页面列表。你只需要在此文件(或任何你想要列表所在的文件)中添加以下代码:
{% for cat in site.category-list %}
### {{ cat }}
<ul>
{% for page in site.pages %}
{% if page.resource == true %}
{% for pc in page.categories %}
{% if pc == cat %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endif %} <!-- cat-match-p -->
{% endfor %} <!-- page-category -->
{% endif %} <!-- resource-p -->
{% endfor %} <!-- page -->
</ul>
{% endfor %} <!-- cat -->
这里是关于它如何工作的简要说明:
_config.yml
中指定的每个类别。resource
指示,那么对于文件所属的每个类别,如果其中之一与当前列出的类别匹配,则显示链接到该页面。注意:在_config.yml
中修改的变量category-list
和资源文件中的categories
可以被称为任何你想要的东西,只要确保在生成列表的文件中使用相同的变量。
另请注意:当您修改_config.yml
时,即使使用了--watch
选项,也必须完全重新启动Jekyll,您必须停止并重新启动它。我花了一段时间才弄清楚为什么我的更改没有生效!
您可以在我的网站上的资源页面上查看最终产品,尽管我今天刚刚把它组合起来,所以在撰写本文时,它远未完成,但您可以在主页上查看我的简历。
ressource
文件到底是什么?我应该把它放在哪里?谢谢。 - giac使用液态模板的 "contains" 属性可以更清晰地完成此操作:
categories: [fruit, meat, vegetable, cheese, drink]
在您的page.md文件中,在front matter中添加一个或多个_config.yml中可用的类别。---
layout: page
title: Orange juice
description: Orange juice is juice from oranges. It's made by squeezing oranges.
categories: [fruit, drink]
---
{% for page in site.pages %}
{% if page.categories contains 'fruit' %}
<div class="item">
<h3>{{page.title}}</h3>
<p>{{page.description}}</p>
</div>
{% endif %}
{% endfor %}
show_drafts: true
来解决命名问题 ;) - Polygnome有一些变化/简化是可能的(来自felipesk的回答)。可能是由于Jekyll的改进。
_config.yml
中不需要索引。
如果页面列表不在页面中列出,而是在文档中列出,您也可以将类别添加到文档中:
---
layout: doc
title: Fruit List
categories: [fruit]
---
{% for p in site.pages %}
{% if p.categories contains page.category %}
* [{{ p.title }}]({{ p.url | absolute_url }})
<small>{{ p.excerpt }}</small>
{% endif %}
{% endfor %}
{% for post in site.categories[page.category] %}
* [{{ post.title }}]({{ post.url | absolute_url }})
<small>{{ post.excerpt }}</small>
{% endfor %}
_includes
并像下面这样使用即可:## Further Reading
{% include pages-list.md %}
我使用主题Minimal Mistakes