在Jekyll中制作基于页面的自定义循环

时间:2012-02-02 10:33:27

标签: jekyll liquid

我想创建另一个基于页面的循环,就像_posts文件夹适用于博客部分一样,但适用于小型杂志目录。 (希望这很有意义)

也许我误解了一些简单的事情,但我无法解决这个问题。 我有这个循环,感觉它应该工作,但没有任何东西返回。

{% for page in site.pressitems %}
<li>
    <a href="{{ post.url }}">{{ page.title }}</a>
</li>
{% endfor %}

代码,链接,解释,任何事情都非常感谢。 :)

4 个答案:

答案 0 :(得分:19)

您无法将自己的收藏集添加到site

site只知道三个集合:pagespostscategories。您可以通过site.<category>.posts获取某个类别的所有帖子。 AFAIK,类别仅适用于帖子,而非页面。

这是有道理的,因为Jekyll应该主要是博客引擎,而不是通用的静态网站生成器。

所以你现在最好的解决方案就是“撒谎”给杰基尔。让它相信你有帖子,实际上你正在制作页面。

_posts/
  pressitems/
  blog/

您将能够遍历_posts / pressitems中的元素,如下所示:

for item in site.categories.pressitems.posts do
  ... {{ item.title }} ... {{ item.url }}
endfor

同样,您的“真实博客条目”将采用这种方式:

for p in site.categories.blog.posts do
  ... {{ p.title }} ... {{ p.url }}
endfor

问题在于你必须尊重Jekyll关于文件名的命名约定;你的pressitems必须看起来像真正的帖子。这意味着它们必须以yyyy-mm-dd字符串开头命名,如帖子。只要给他们一个随机的日期。

_posts/
  pressitems/
    1901-01-01-the-first-press-item.textile
    1902-01-01-the-second-one.textile

编辑:这篇文章最初是在2012年写的,但是现在已经没有了。 Modern Jekyll允许您创建自己的集合https://jekyllrb.com/docs/collections/

答案 1 :(得分:12)

您可以遍历site.pages

{% for page in site.pages %}
  <h3><a href="{{ page.url }}">{{ page.title }}</a></h3>
  <p>{{ page.content }}</p>
{% endfor %}

将列表限制为使用特定布局的唯一页面。

{% for page in site.pages %}
  {% if page.layout == 'team' %}  
    <h3><a href="{{ page.url }}">{{ page.title }}</a></h3>
    <p>{{ page.content }}</p>
  {% endif %}
{% endfor %}

请参阅有关生成站点地图的帖子: http://vvv.tobiassjosten.net/jekyll/jekyll-sitemap-without-plugins/

答案 2 :(得分:10)

在Jekyll 2.5.3中,您实际上可以将自己的collection添加到网站。

将_my_collection文件夹添加到root并填写文档。 添加到_config.yml: 集合: - my_collection

现在使用帖子,页面或类别来调用文档。 例如 { for post in site.my_collection < do something > }

重要的是要注意,可以使用此功能,它已被Jekyll团队标记为“实验性功能,API可能会更改,直到功能稳定”。

答案 3 :(得分:4)

在jekyll上,您还可以向页面添加yaml front-matter。添加自定义前端内容(例如页面类别)没有任何问题。

---
layout: plain
title: "My beautiful page"
description: ""
snippet: ""
page-category: "category 1"
---

通过以下方式访问它们:

{% for page in site.pages %}
   {% if page.page-category == "category 1" %}
        {{ page.content }}
   {% endif %}
{% endfor %}