Jekyll 生成给定类别中的页面(非帖子)列表

Jekyll 生成给定类别中的页面(非帖子)列表,jekyll,github-pages,Jekyll,Github Pages,我正在使用Jekyll作为网站(而不是博客)的静态生成器,我希望有一个自动生成的索引页上所有页面的列表。具体来说,我想有不同的类别,并列出每个类别中的所有文章分别。这是我描述的一个例子,如果你跟不上的话。在Jekyll中有没有办法做到这一点(例如GitHub页面)?我已经看过了,但这似乎是博客文章格式的特点。你应该区分页面和文章(文章)。列出所有按类别排序的帖子根本不是问题。您可以循环浏览site.categories。它包含类别名称和该类别中所有帖子的列表 列出所有页面也是可能的。您可以循环浏

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

你应该区分页面和文章(文章)。列出所有按类别排序的帖子根本不是问题。您可以循环浏览site.categories。它包含类别名称和该类别中所有帖子的列表

列出所有页面也是可能的。您可以循环浏览site.pages。但页面不属于特定类别(只有帖子才属于)


当我看一看你发布的例子时,在帖子上使用分类,然后在site.categories中循环,这似乎是一个不错的选择。它将为您提供理想的输出。

在构建我自己的站点时,我遇到了同样的问题,我找到了一个(IMHO)简单而健壮的解决方案。希望这对其他希望做类似事情的人有用

问题 给定站点上的页面子集(不是帖子),根据其类别将其列在标题下。例如:给定一组页面,我们考虑资源页(或引用页,或者要显示的页面的任何逻辑分组),我们希望在它们的类别下列出它们(例如,代码、解释等)。 解决方案 为了获得我们想要的行为,我们必须在三个地方进行修改:

  • \u config.yml
  • resources.md
  • 资源文件-X.md
\u config.yml
\u config.yml
中,我们必须添加将出现在资源文件中的所有类别/关键字/标记(或任何您想称之为的)的列表。以下是我所拥有的:

category-list: [code, editors, math, unix]
您可以任意调用该变量,我选择了
category list
,只要确保在
resource.md
文件中使用相同的变量即可

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

资源文件-X.md
这些是您希望在
resources.md
页面上建立索引和链接的文件。您需要做的就是在每个文件的顶部添加两个文件变量。第一个是指示此文件是一个资源文件

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

categories: [code, unix]
resources.md
该文件将根据页面各自的类别生成页面列表。您只需将以下代码添加到此文件(或希望列表位于其中的任何文件):

{%用于站点中的cat.category-list%}
###{{cat}}
    {site.pages%中的页面为%s} {%if page.resource==true%} {page.categories%%中pc的% {%pc==cat%}
  • {%endif%} {%endfor%} {%endif%} {%endfor%}
{%endfor%}
代码分解 简单介绍一下这是如何工作的:

  • 循环浏览
    \u config.yml
    中指定的每个类别
  • 显示具有该类别名称的标题
  • 为属于该类别的页面启动无序列表
  • 循环浏览站点上的页面
  • 如果页面是由文件变量
    resource
    指示的资源文件,则对于文件所属的每个类别,如果其中一个类别与所列出的当前类别匹配,则显示指向该页面的链接
注意:
\u config.yml
中的变量
category list
和资源文件中的
categories
可以根据需要调用,只需确保在生成列表的文件中使用相同的变量即可

另一个注意事项:当您修改
\u config.yml
时,您必须完全重新启动Jekyll,即使您有
--watch
选项,也必须停止并重新启动它。我花了一段时间才弄明白为什么我的更改没有生效

最终产品 你可以在上的参考资料页面上看到最终产品,尽管我今天刚刚把它放在一起,所以在撰写本文时,它还远未完成,但是如果你想在主页上查看我的个人简历,你可以查看我的个人简历


希望这有帮助

使用液体“包含”属性有一种更干净的方法:

在_config.yml中,添加类别索引 在首页内的page.md中,添加一个或多个_config.yml中可用的类别 要获取水果类别中的所有页面,请在模板中执行以下操作:
{%用于site.pages%}
{%如果page.categories包含“水果”}
{{page.title}}
{{page.description}

{%endif%} {%endfor%}
可能有一些变化/简化(felipesk的回答)。也许是因为Jekyll的改进

\u 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 %}

我使用主题

这确实是Jekyll提供的功能的极限,但它不能满足我的需要。我想我将通过编写一个bash脚本来构建站点,然后调用一个Haskell脚本来按类别插入页面链接
categories: [fruit, meat, vegetable, cheese, drink]
---
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 %}
---
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 %}
## Further Reading
{% include pages-list.md %}