杰基尔按类别显示文章

57

我在为此烦恼,非常感谢帮助。

我想显示所有按类别组织的Jekyll文章列表。我知道第三行不正确,但我无法弄清楚应该是什么。有任何想法吗?谢谢!

{% for category in site.categories %}
    <h3>{{ category | first }}</h3>
    {% for post in page.categories.category %}
      {{ post.title }}<br>
    {% endfor %}            
{% endfor %}
6个回答

75

明白了!需要在列出每篇文章之前进行中间文章循环

<ul>
{% for category in site.categories %}
  <li><a name="{{ category | first }}">{{ category | first }}</a>
    <ul>
    {% for post in category.last %}
      <li><a href="{{ post.url }}">{{ post.title }}</a></li>
    {% endfor %}
    </ul>
  </li>
{% endfor %}
</ul>

24
我在本地测试中发现{{ posts }}的第一篇文章是该类别的名称,会在HTML中显示为空白行,因此我在<li><a href="{{ post.url }}">{{ post.title }}</a></li>之前添加了{% if post.url %},以删除类别行。 - Tanky Woo
嘿,谢谢你,这很好用!不过我有一个问题(抱歉,我是个 Jekyll 新手),也许可以帮助完善你的答案:你知道(如果可能的话)如何将此代码放在位于 /category/<name> 的页面中,从 URL 中读取 <name> 并相应地拉取帖子列表吗?(编辑)我的问题在这里重复了:https://dev59.com/nYPba4cB1Zd3GeqPuZYB#25979472 - gru

27

顺便说一下,如果有人只想列出某个类别的文章,请使用以下代码(与上面的示例不同,因为该类别将返回一个文章列表...)

<p>Posts in category "basic" are:</p>

<ul>
  {% for post in site.categories.basic %}
    {% if post.url %}
        <li><a href="{{ post.url }}">{{ post.title }}</a></li>
    {% endif %}
  {% endfor %}
</ul>

1
这是一个更好的答案,避免了被接受的答案所建议的必要的hack。 - DavidMann10k
如何处理包含空格的类别名称,例如“foo bar”? - Doğukan HAN

6
现在有一个官方插件可用于此。 jekyll-archives
为了使用它, 将jekyll-archives添加到您的Gemfile_config.yml文件中。 根据您的需求添加类似以下配置。
jekyll-archives:
  enabled: all
  layouts:
    year: archive/year
    month: archive/month
    day: archive/day
    tag: archive/tag
    category: archive/category
  permalinks:
    year: '/:year/'
    month: '/:year/:month/'
    day: '/:year/:month/:day/'
    tag: '/tags/:name/'
    category: '/category/:name/'
layouts 可根据 archive type 使用以下页面属性。
  • page.type - (以下任意一项:yearmonthdaytagcategory
  • page.title - (仅适用于类型为 tag 和 category。否则为 Nil。)
  • page.date - (根据 page.type,应解析出日期和月份字段。)
  • page.posts - (此存档的帖子列表)

这是一个基于年份的存档示例布局。

<h1>Archive of posts from {{ page.date | date: "%Y" }}</h1>
<ul class="posts">
{% for post in page.posts %}
  <li>
    <span class="post-date">{{ post.date | date: "%b %-d, %Y" }}</span>
    <a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
  </li>
{% endfor %}
</ul>

2
<h5>Categories</h5>
{% for category in site.categories %}
    {% assign cat = category[0] %}
    <h6><a href="#">{{ cat }}</a></h6>
    {% for post in site.categories[cat] %}
        <a href="{{ post.url }}">{{ post.title }}</a> <small>{{ post.date }}</small>
    {% endfor %}
{% endfor %}

0

我无法立即回忆起确切的语法,但以下代码类似应该能够检索类别名称,以允许您检索每个类别的帖子...

{% for category in site.categories %}

   {% assign cat_name = category[0] %}

  {% for post in site.categories.cat_name %}

       ...

  {% endfor%}

 {% endfor %}

无法工作。读取 {% for post in site.categories[cat_name] %} - David Jacquel

0
这是一个使用排序的答案(非常有用!):
{% comment %}
#
#  Change date order by adding '| reversed'
#  To sort by title or other variables use {% assign sorted_posts = category[1] | sort: 'title' %}
#
{% endcomment %}
{% assign sorted_cats = site.categories | sort %}
{% for category in sorted_cats %}
{% assign sorted_posts = category[1] | reversed %}
<h2 id="{{category[0] | uri_escape | downcase }}">{{category[0] | capitalize}}</H2>
<ul>
  {% for post in sorted_posts %}
    <li><a href="{{ site.url }}{{ site.baseurl }}{{  post.url }}">{{  post.title }}</a></li>
  {% endfor %}
</ul>
{% endfor %}

这不是我的,它是从这里拿来的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接