我想创建另一个基于页面的循环,就像_posts
文件夹适用于博客部分一样,但适用于小型杂志目录。 (希望这很有意义)
也许我误解了一些简单的事情,但我无法解决这个问题。 我有这个循环,感觉它应该工作,但没有任何东西返回。
{% for page in site.pressitems %}
<li>
<a href="{{ post.url }}">{{ page.title }}</a>
</li>
{% endfor %}
代码,链接,解释,任何事情都非常感谢。 :)
答案 0 :(得分:19)
您无法将自己的收藏集添加到site
。
site
只知道三个集合:pages
,posts
和categories
。您可以通过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 %}