在Jekyll中创建自定义的基于页面的循环

问题描述:

我想创建另一个基于页面的循环,与_posts文件夹适用于博客部分的方式相同,但适用于小型杂志目录。 (希望这是有道理的)在Jekyll中创建自定义的基于页面的循环

也许我误解了一些简单的东西,但我不能解决它。 我有这个循环,这感觉就像它应该工作,但没有得到返回。

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

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

您不能像这样将您自己的收藏添加到site

site只知道三个集合:pages,postscategories。您可以通过做site.<category>.posts来获得某个类别的所有帖子。 AFAIK,类别仅适用于帖子,不适用于页面。

这很有意义,因为Jekyll应该主要是一个博客引擎,而不是一般的静态网站生成器。

因此,您现在最好的解决方案就是“说谎”到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年,但没有任何更多的这是真的。现代杰基尔确实允许您通过site.pages

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

创建自己的集合https://jekyllrb.com/docs/collections/

+0

感谢您的解释。帮助了很多 – PaulAdamDavis 2012-02-28 11:20:32

+1

我认为这应该是'endfor',但我可能会误解。 – Zaz 2013-05-20 17:24:01

+0

已更新,谢谢! – kikito 2013-05-22 21:17:53

可以遍历并限制列表中使用特定布局的网页。

{% 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/

+0

非常有用,谢谢。我已经将其用于我自己的用例:在网站上列出其他网页。为此,我添加了条件'page.permalink!= p.permalink'(使用'p'作为迭代器值而不是'page'来避免名称空间冲突)。 – 2014-11-27 22:24:10

+0

这非常有帮助,谢谢!一点点if逻辑在这里有很长的路要走 – 2015-01-29 01:47:16

在杰基尔也可以YAML前事项添加到页面。添加自定义前台内容(如页面类别)没有任何问题。

--- 
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 %} 

在化身2.5。3你其实可以可以加入你自己的collection到网站。

将_my_collection文件夹添加到根目录并填入文档。 添加到_config.yml: 集合: - my_collection

现在使用文章,页面或类别呼叫文档。 例如 { for post in site.my_collection < do something > }

重要的是要注意,这个特性可以被Jekyll团队用来标记为“一个实验性的功能和API可能会改变,直到功能稳定”。

+0

这是截至2016年10月的正确答案 – cwRichardKim 2016-10-26 16:49:53