使用{%for post in site.posts%}从特定子文件夹中提取

时间:2017-01-15 11:20:48

标签: css pug yaml jekyll liquid

我目前正在开发我的第一个Jekyll网站。我有一个页面,其中2个单独的部分显示某些帖子的预览(一个样式的缩略图)。

我想要的是这些部分显示_site / _posts中不同子文件夹的帖子。我组织_posts包含两个子文件夹,/ lesplannen和/ verslagen(课程计划和报告),每个子文件夹包含一堆文章。

其中一个部分的代码如下(玉格式化):

{% for post in site.posts limit: 4 %}
    a(href="{{post.url}}" target="_blank" style="background-image: url(assets/img/posts/lesplannen/thumbnails/{{post.thumbnail}})").lesplan-thumb
      .article-meta
        .name {{post.title}}
        .date {{ post.date | date: "%b %d, %Y" }}
    {% endfor %}

同样的另一部分。我的第一直觉是将site.posts分别更改为site.posts.lesplannen和site.posts.verslagen,但这导致拇指根本不显示。我还在文章本身中将这些类别添加到了前面的内容中,但这也没有被提及。

为清楚起见,我要做的是从_site / _posts / subfolder 1获得第1部分显示帖子,从第2部分显示来自_site / _posts /子文件夹2的帖子。

什么是正确的方法呢?

奖励积分问题:该页面按预期显示4个帖子,但选择显示12个帖子中的6个帖子。为什么这样,我可以指定例如总是显示最后的x个帖子?

供参考:
GitHub页面:https://zaena.github.io/portfolio-nadine/
GitHub回购:https://github.com/Zaena/portfolio-nadine

2 个答案:

答案 0 :(得分:1)

该网站有几个问题:

帖子文件夹结构错误

帖子始终位于_posts文件夹中,它们不能在另一个文件夹中(Jekyll可以显示它们但是某些功能丢失了,它们并不意味着有)

如果类别是文件夹,则它们不能以下划线(_)

开头

实际结构的类别定义为/_verslagen,它们应为/verslagen,其帖子位于/verslagen/_posts

在两个不同的文件夹中具有相同的帖子具有意外行为

有些帖子位于不同的文件夹中,只应存在一个版本。

解决方案

您正在寻找的结构是:

├── index.html
├── lesplannen
│   └── _posts
│       ├── 2016-12-10-dit-is-een-lesplan2.md
│       ├── 2016-12-10-dit-is-een-lesplan3.md
│       ├── 2016-12-10-dit-is-een-lesplan4.md
│       └── 2016-12-10-dit-is-een-lesplan.md
└── verslagen
    └── _posts
        ├── 2016-12-10-dit-is-een-verslag10.md
        ├── 2016-12-10-dit-is-een-verslag11.md
        ├── 2016-12-10-dit-is-een-verslag12.md
        ├── 2016-12-10-dit-is-een-verslag2.md
        ├── 2016-12-10-dit-is-een-verslag3.md
        ├── 2016-12-10-dit-is-een-verslag4.md
        ├── 2016-12-10-dit-is-een-verslag5.md
        ├── 2016-12-10-dit-is-een-verslag6.md
        ├── 2016-12-10-dit-is-een-verslag7.md
        ├── 2016-12-10-dit-is-een-verslag8.md
        ├── 2016-12-10-dit-is-een-verslag9.md
        └── 2016-12-10-dit-is-een-verslag.md

这会在site.categories.verslagensite.categories.lesplannen中的每个类别下提供帖子。

然后显示每个类别帖子的代码如下:

{% for post in site.categories.verslagen %}
<p>{{post.title}}</p>
<p>{{ post.date | date: "%b %d, %Y" }}</p>
<p>{{post.thumbnail}}</p>
{% endfor %}

{% for post in site.categories.lesplannen %}
<p>{{post.title}}</p>
<p>{{ post.date | date: "%b %d, %Y" }}</p>
<p>{{post.thumbnail}}</p>
{% endfor %}

答案 1 :(得分:0)

以下是我如何让它们单独显示:

<强> index.html

---
---

<p>Posts in dir-a:</p>

<ul>
    {% for post in site.posts %}
        {% assign first_dir = post.path | remove_first: "_posts/" | split: "/" | first %}
        {% if first_dir == 'dir-a' %}
            <li>
                <a href="{{ post.url }}">{{ post.title }}: {{ post.date | date: "%b %d, %Y" }}</a>
            </li>
        {% endif %}
    {% endfor %}
</ul>

<p>Posts in dir-b:</p>

<ul>
    {% for post in site.posts %}
        {% assign first_dir = post.path | remove_first: "_posts/" | split: "/" | first %}
        {% if first_dir == 'dir-b' %}
            <li>
                <a href="{{ post.url }}">{{ post.title }}: {{ post.date | date: "%b %d, %Y" }}</a>
            </li>
        {% endif %}
    {% endfor %}
</ul>

这假设以下目录结构:

/_posts
/_posts/dir-a
/_posts/dir-b

应该很好,很容易适应您的需求。