生成给定类别中的页面列表(不是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指定的每个类别。
  • 显示具有该类别名称的标题。
  • 为属于该类别的页面启动一个无序列表。
  • 循环浏览网站上的网页。
  • 如果该页面是文件variablesresource所指示的资源文件,则对于该文件所属的每个类别,如果其中一个与正在列出的当前类别匹配,则显示该页面的链接。

注意:可以调用_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循环似乎是要走的路。 它会得到你想要的输出。