生成给定类别中的页面列表(而不是帖子)

Mik*_*ike 52 jekyll github-pages

我使用Jekyll作为网站(而不是博客)的静态生成器,我想在我的索引页面上自动生成所有页面的列表.具体来说,我希望有不同的类别,并分别列出每个类别中的所有文章.如果你遇到麻烦,这是我所描述一个例子.有没有办法在Jekyll中这样做(例如GitHub页面)?我已经看过变量文档页面,但这似乎特定于博客文章格式.

m-r*_*aud 84

在构建我自己的网站时,我遇到了同样的问题,我找到了一个(恕我直言)简单而强大的解决方案.希望这对任何希望做类似事情的人都有用.

问题

给定网站上的一部分页面(不是帖子),根据其类别在标题下列出它们.例如:给定一组我们考虑资源页面(或参考页面,或您想要显示的页面的逻辑分组)的页面,我们希望在它们的类别下列出它们(例如代码,解释等) .

解决方案

为了获得我们想要的行为,我们必须在三个地方进行修改:

  • _config.yml
  • resources.md
  • resource-file-X.md

_config.yml

_config.yml,我们必须添加将出现在资源文件中的所有类别/关键字/标签(或任何您想要调用它)的列表.以下是我的内容:

category-list: [code, editors, math, unix]
Run Code Online (Sandbox Code Playgroud)

您可以调用变量,我选择category-list,只需确保在resource.md文件中使用相同的变量.

注意:将项目放在列表中的顺序是它们将在resource.md页面上列出的顺序.

resource-file-X.md

这些是您要在resources.md页面上编制索引并链接到的文件.您需要做的就是在每个文件的顶部添加两个文件变量.第一个是指示该文件是资源文件.

resource: true
Run Code Online (Sandbox Code Playgroud)

第二个是指出您希望将此文件编入索引的类别.您可以根据需要在多个类别下对其进行索引,如果您希望页面未编入索引,请将列表留空.我在C中正确处理EINTR的参考有以下几类:

categories: [code, unix]
Run Code Online (Sandbox Code Playgroud)

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 -->
Run Code Online (Sandbox Code Playgroud)

代码细分

只是快速解释一下这是如何工作的:

  • 循环遍历指定的每个类别_config.yml.
  • 显示具有该类别名称的标题.
  • 为属于该类别的页面启动无序列表.
  • 循环浏览网站上的页面.
  • 如果页面是文件变量指示的资源文件resource,则对于文件所属的每个类别,如果其中一个与列出的当前类别匹配,则显示指向该页面的链接.

注意:可以随意调用资源文件category-list_config.ymlcategories中的变量,只需确保在生成列表的文件中使用相同的变量.

另请注意:修改时_config.yml,必须完全重启Jekyll,即使有--watch选项,也必须停止并重新启动它.我花了一段时间才弄清楚为什么我的更改没有生效!

最终产品

您可以在我的网站上的资源页面上看到最终产品,虽然我今天只是将它们放在一起,所以在撰写本文时,它还远未完成,但您可以在主页上查看我的生物.

希望这可以帮助!

  • 对不起,迟到的回复,我一定错过了通知.@giacomoV,术语"资源"是完全随意的,这只是我用过的用例,你可以用"食谱","codelabs","教程"等替换它.几乎任何不是"帖子"的东西都是它在Jekyll中定义.希望这是有道理的:P (2认同)

小智 15

使用液体"包含"属性可以更清洁地完成此操作

在_config.yml上添加您的类别索引

categories: [fruit, meat, vegetable, cheese, drink]
Run Code Online (Sandbox Code Playgroud)

在您的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]
---
Run Code Online (Sandbox Code Playgroud)

在您的模板上获取您所做的水果类别中的所有页面:

{% for page in site.pages %}
  {% if page.categories contains 'fruit' %}
    <div class="item">
      <h3>{{page.title}}</h3>
      <p>{{page.description}}</p>
    </div>
  {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)