GitHub页面中的分层类别

Kev*_*man 16 liquid jekyll github-pages

我在GitHub页面上使用Jekyll,我想要像这样的分层类别:

  • 动物 - >哺乳动物 - >猫 - > _posts - > housecat.md,tiger.md
  • 动物 - >哺乳动物 - >狗 - > _posts - > poodle.md,doberman.md
  • 动物 - >爬行动物 - >蜥蜴 - > _posts - > iguana.md,chameleon.md

我希望用户能够访问/animals并查看每个类别的每个帖子的列表.但如果他们去/animals/mammals,他们只会看到哺乳动物.如果他们去/animals/mammals/cats,那么他们只会看到猫.

我知道我可以手动执行此操作,方法是index.html在每个目录中放置一个文件,然后循环执行site.categories.mammals或者site.categories.cats,例如.

但这似乎有点过于暴力,我希望有更好的方法.如果我想改变我显示列表的方式,我将不得不在每个子类别中更改它.当子类别共享一个名称时,我也会遇到问题,比如/ABC/XYZ/_posts/one.md/DEF/XYZ/_posts/two.md.

我试过这篇文章,它使用了一个category.html循环遍历的主页page.category:

{% for post in site.categories.[page.category] %}
  <h2><a href=""></a></h2>
  <p></p>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

然后每个index.html文件都使用它作为其布局.这几乎可行,但它似乎仅限于一个类别,而不是多个层次类别.

是否有更少的暴力方法来创建层次结构类别的列表?

chu*_*die 5

page.categories 是一个列表

/sf/answers/1674959051/

{% for cat in page.categories %}
  <h1>{{ cat }}</h1>
  <ul>
    {% for post in site.categories[cat] %}
      <li><a href="{{ post.url }}">{{ post.title }}</a></li>
    {% endfor %}
  </ul>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

来自 jekyll 的关于 page.category 的文档http://jekyllrb.com/docs/variables/#page-variables

此帖子所属的类别列表。类别来自 _posts 目录上方的目录结构。例如,位于 /work/code/_posts/2008-12-24-closures.md 的帖子会将 这个字段设置为 ['work', 'code']。这些也可以在 YAML Front Matter 中指定。

您应该能够轻松地向每个文件夹添加一个简单的动态 index.html,并且类别应该自动分层。

更新

以上不起作用。您需要将每个层次结构的类别组合视为唯一项。合并索引页面的类别,并将其与站点中的所有帖子进行比较。

/foo/bar/_posts/2016-08-01-foo-bar-test.html

---
categories:
  - foo
  - bar
title: test foo bar
---

<h2>Foo Bar</h2>
Run Code Online (Sandbox Code Playgroud)

/var/bar/_posts/2016-08-01-test-var-bar.html

---
categories:
  - var
  - bar
title: test var bar
---

<h2>Var Bar</h2>
Run Code Online (Sandbox Code Playgroud)

/foo/bar/index.html

---
categories:
 - foo
 - bar
---

{% assign pagecat = page.categories | join ' ' | append: ' '%}
{% assign pagecatlen = page.categories.size %}
  <h1>{{ cat }}</h1>
  <ul>
    {% for post in site.posts %}
    {% assign postcat = '' %}
    {% for thispostcat in post.categories limit: pagecatlen %}
      {% assign postcat = postcat | append: thispostcat %}
      {% assign postcat = postcat | append: ' ' %}
    {% endfor %}

    {% if (postcat == pagecat) %}
      <li><a href="{{ post.url }}">{{ post.title }}</a></li>
    {% endif %}
    {% endfor %}
  </ul>
Run Code Online (Sandbox Code Playgroud)

对于 _posts 中的文件,类别是可选的,但它们是每个索引文件的前端所必需的。