生成给定类别中的页面列表(不是post)
我正在使用Jekyll作为一个网站(而不是一个博客)的静态生成器,我想在我的索引页上有一个自动生成的所有页面的列表。 具体来说,我想要有不同的类别,并且分别列出每个类别中的所有文章。 以下是我所描述的一个例子,如果您遇到以下问题。 在Jekyll有没有办法做到这一点? 我已经看到了variables文档页面,但似乎特定于博客文章格式。
当我build立我自己的网站,我遇到了这个相同的问题,我find了一个(恕我直言)简单而强大的解决scheme。 希望对于希望做类似事情的任何人来说这是有用的。
问题
给定网站上的一部分网页(不是网页),根据其类别在标题下列出。 例如:给定一组我们认为是资源页面(或者参考页面,或者你想要显示的页面的任何逻辑分组)的页面,我们希望在它们的类别下面列出它们(例如代码,解释等等) 。
解决scheme
为了得到我们想要的行为,我们必须在三个地方进行修改:
_config.yml
-
resources.md
-
resource-file- X .md
_config.yml
在_config.yml
,我们必须添加将出现在资源文件中的所有类别/关键字/标签(或任何你想调用它的)的列表。 这是我在我的里面:
category-list: [code, editors, math, unix]
你可以调用任何variables,我select了category-list
,只要确保你在resource.md
文件中使用了相同的variables即可。
注意:您将这些项目放置在列表中的顺序是它们将在resource.md
页面上列出的顺序。
resource-file- X .md
这些是您想要在resources.md
页面上build立索引和链接的文件。 所有你需要做的是将两个文件variables添加到每个文件的顶部。 首先是表明这个文件是一个资源文件。
resource: true
第二个是指出你想要这个文件被索引到什么类别。 您可以根据需要将其索引到任意多个类别,并且如果您希望未索引页面,请将列表留空。 我在C中正确处理EINTR的参考有以下几种:
categories: [code, unix]
resources.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
指定的每个类别。 - 显示具有该类别名称的标题。
- 为属于该类别的页面启动一个无序列表。
- 循环浏览网站上的网页。
- 如果该页面是文件variables
resource
所指示的资源文件,则对于该文件所属的每个类别,如果其中一个与正在列出的当前类别匹配,则显示该页面的链接。
注意:可以调用_config.yml
的variablescategory-list
和资源文件中的categories
,只要确保在生成列表的文件中使用相同的variables。
另一个注意:当你修改_config.yml
,你必须重新启动Jekyll,即使你有--watch
选项,你必须停止并重新启动它。 我花了一段时间才弄清楚为什么我的改变没有生效!
最终产品
您可以在我网站上的资源页面上看到最终产品,尽pipe今天我只是把它放在一起,所以在写这篇文章的时候,这还远远没有完成,但是如果您想在主页上查看,我可以查看我的简历。
希望这可以帮助!
有一个更清洁的方式来使用液体“包含”属性来做到这一点
在_config.yml上添加你的类别索引
categories: [fruit, meat, vegetable, cheese, drink]
在你的page.md内部的前面添加一个或多个在_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 %}
你应该区分页面和文章(文章)。 列出按类别sorting的所有post都不是问题。 您可以遍历site.categories,它包含类别名称和该类别中所有post的列表。
列出所有页面也是可能的,你可以循环site.pages。 但一个页面不属于特定的类别(只有职位)。
当我看看你发布的例子,在post上使用类别,然后通过site.categories循环似乎是要走的路。 它会得到你想要的输出。