我正在完成我的网站重新设计,只需要完成我的投资组合页面。我不想使用投资组合条目的帖子,而是使用子目录/子页面:
...
work
project
index.html
project-2
index.html
index.html
...
我想遍历列表中的这些子页面以显示在work/index.html
上。
类似于:
<ul>
{% for page in site.work.pages %}
<li>
<figure>
<img src="/img/foo.jpg" alt="foo">
</figure>
</li>
{% endfor %}
</ul>
如何做到这一点?
答案 0 :(得分:2)
Jekyll不像你的例子那样简单地支持这个,it is coming in 2.0 however。
您可以将一个键/值对添加到子页面的YAML标题中,以表示它应该出现在主索引页面上。我有一个类似的设置,我用它来定义哪些页面应该出现在网站的主导航中。
---
group: work
---
<ul>
{% for node in site.pages %}
{% if 'work' == node.group %}
<li><a href="{{node.url}}">{{node.title}}</a></li>
{% endif %}
{% endfor %}
</ul>
如果您更改if条件以对URL进行子字符串匹配,则可以避免要求group属性,但此解决方案更容易理解。
答案 1 :(得分:0)
如果您使用 jekyll build
构建自己的页面,您可以简单地创建一个名为 _plugins/page_filters.rb
的文件,其中包含以下内容:
module Jekyll
module PageFilters
def children_of(all_pages, parent)
all_pages.select { |p| child_of?(p, parent) }
end
private
def child_of?(child, parent)
parent_path = parent["path"]
child_path = child.path
# Exclude 'index.md' from becoming a child of itself
return false if parent_path == child_path
# Remove 'index.md' from the parent path
parent_path = parent_path.split("index.md", 2).first
child_path.start_with? parent_path
end
end
end
Liquid::Template.register_filter(Jekyll::PageFilters)
然后像这样调用 children_of
过滤器:
{% assign children = site.pages | children_of: page %}
<ul>
{% for child in children %}
<li><a href="{{ child.url }}">{{ child.title }}</a></li>
{% endfor %}
</ul>