如何使用 Jekyll 按自定义 YAML 前端变量对帖子进行排序?
How to use Jekyll to sort posts by a custom YAML front matter variable?
我正在尝试在我的 Jekyll 站点中创建一个页面,该页面将显示自定义变量并列出包含该自定义变量的 post。
我使用 Thiago Rossener 创建的模板创建了一个电影评论博客:
蒂亚戈的模板:https://github.com/thiagorossener/jekflix-template
我的网站:https://www.howdareyoureview.com/
在每个 post 中,我在 YAML 前端定义了与电影细节相关的自定义变量(即演员、导演评分等)
例如:
---
layout: post
title: "Baby Driver"
image: 'https://res.cloudinary.com/how-dare-you-review/image/upload/c_fill,h_399,w_760/v1529865791/baby-driver.png'
tags:
- action
score: 72
director: Edgar Wright
written-by: Edgar Wright
staring:
- Ansel Elgort
- Lily James
- Eiza González
- Jon Hamm
- Jamie Foxx
---
我想创建与此模板中已存在的标签页面完全相同的页面:
https://www.howdareyoureview.com/tags/
除了我想按导演、主演等而不是标签排序。
标签页面是使用 tags.html 文件中的以下代码创建的:
---
layout: minimal
title: "#Tags"
permalink: /tags/index.html
description: "Procure por sua #tag favorita."
---
<div class="tags">
{% assign tags_list = site.tags %}
{% if tags_list.first[0] == null %}
{% for tag in tags_list %}
<a href="#{{ tag | slugify }}">{{ tag }}</a>
{% endfor %}
{% else %}
{% for tag in tags_list %}
<a href="#{{ tag[0] | slugify }}">{{ tag[0] }}</a>
{% endfor %}
{% endif %}
{% assign tags_list = nil %}
</div>
{% for tag in site.tags %}
<div class="tag-wrapper">
<span class="tag-title" id="{{ tag[0] | slugify }}">{{ tag[0] }}</span>
<ul class="post-list">
{% assign pages_list = tag[1] %}
{% for post in pages_list reversed %}
{% if post.title != null %}
{% if group == null or group == post.group %}
<li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%m/%d/%Y" }}</time></a></li>
{% endif %}
{% endif %}
{% endfor %}
{% assign pages_list = nil %}
{% assign group = nil %}
</ul>
</span>
</div>
{% endfor %}
为了实现我创建的自定义变量的这一点,我尝试用 director 替换 "tag/tags" 并将文件作为 "directors.html" 保存到根目录中,但页面是空白的。
---
layout: minimal
title: "#Directors"
permalink: /directors/index.html
description: "Procure por sua director favorita."
---
<div class="directors">
{% assign directors_list = site.director %}
{% if directors_list.first[0] == null %}
{% for director in directors_list %}
<a href="#{{ tag | slugify }}">{{ director }}</a>
{% endfor %}
{% else %}
{% for director in directors_list %}
<a href="#{{ director[0] | slugify }}">{{ director[0] }}</a>
{% endfor %}
{% endif %}
{% assign directors_list = nil %}
</div>
{% for director in site.director %}
<div class="director-wrapper">
<span class="director-title" id="{{ tag[0] | slugify }}">{{ director[0] }}</span>
<ul class="post-list">
{% assign pages_list = director[1] %}
{% for post in pages_list reversed %}
{% if post.title != null %}
{% if group == null or group == post.group %}
<li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%m/%d/%Y" }}</time></a></li>
{% endif %}
{% endif %}
{% endfor %}
{% assign pages_list = nil %}
{% assign group = nil %}
</ul>
</span>
</div>
{% endfor %}
由于代码和概念与填充标签的方式完全相同 - 我不明白为什么这不起作用 - 我希望有人能提供帮助!
这是我的整个目录供参考:
https://github.com/howdareyoureview/howdareyoureview.github.io
标签页面使用 site.tags
,这是一个由 Jekyll 在生成时创建的按标签分组的 site.posts
数组。
您正在尝试通过定位 site.directors
进行复制,但此预期数组不存在。但是,您可以使用 group_by 过滤器来实现您的目标。
<div class="directors">
{% assign directors = site.posts | group_by: 'director' | sort: "name" %}
{% for director in directors %}
{% if director.name == "" %}
{% assign name = "Anonymous" %}
{% else %}
{% assign name = director.name %}
{% endif %}
<a href="#{{ name | slugify }}">{{ name }}</a>
{% endfor %}
</div>
{% for director in directors %}
<div class="director-wrapper">
{% if director.name == "" %}
{% assign name = "Anonymous" %}
{% else %}
{% assign name = director.name %}
{% endif %}
<span class="director-title" id="{{ name | slugify }}">{{ name | debug }}</span>
<ul class="post-list">
{% assign pages_list = director.items %}
{% for post in pages_list reversed %}
<li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%m/%d/%Y" }}</time></a></li>
{% endfor %}
</ul>
</span>
</div>
{% endfor %}
提示:您可以使用检查过滤器来调试您的变量。 {{ myvar | inspect }}
我正在尝试在我的 Jekyll 站点中创建一个页面,该页面将显示自定义变量并列出包含该自定义变量的 post。
我使用 Thiago Rossener 创建的模板创建了一个电影评论博客: 蒂亚戈的模板:https://github.com/thiagorossener/jekflix-template 我的网站:https://www.howdareyoureview.com/
在每个 post 中,我在 YAML 前端定义了与电影细节相关的自定义变量(即演员、导演评分等)
例如:
---
layout: post
title: "Baby Driver"
image: 'https://res.cloudinary.com/how-dare-you-review/image/upload/c_fill,h_399,w_760/v1529865791/baby-driver.png'
tags:
- action
score: 72
director: Edgar Wright
written-by: Edgar Wright
staring:
- Ansel Elgort
- Lily James
- Eiza González
- Jon Hamm
- Jamie Foxx
---
我想创建与此模板中已存在的标签页面完全相同的页面: https://www.howdareyoureview.com/tags/
除了我想按导演、主演等而不是标签排序。 标签页面是使用 tags.html 文件中的以下代码创建的:
---
layout: minimal
title: "#Tags"
permalink: /tags/index.html
description: "Procure por sua #tag favorita."
---
<div class="tags">
{% assign tags_list = site.tags %}
{% if tags_list.first[0] == null %}
{% for tag in tags_list %}
<a href="#{{ tag | slugify }}">{{ tag }}</a>
{% endfor %}
{% else %}
{% for tag in tags_list %}
<a href="#{{ tag[0] | slugify }}">{{ tag[0] }}</a>
{% endfor %}
{% endif %}
{% assign tags_list = nil %}
</div>
{% for tag in site.tags %}
<div class="tag-wrapper">
<span class="tag-title" id="{{ tag[0] | slugify }}">{{ tag[0] }}</span>
<ul class="post-list">
{% assign pages_list = tag[1] %}
{% for post in pages_list reversed %}
{% if post.title != null %}
{% if group == null or group == post.group %}
<li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%m/%d/%Y" }}</time></a></li>
{% endif %}
{% endif %}
{% endfor %}
{% assign pages_list = nil %}
{% assign group = nil %}
</ul>
</span>
</div>
{% endfor %}
为了实现我创建的自定义变量的这一点,我尝试用 director 替换 "tag/tags" 并将文件作为 "directors.html" 保存到根目录中,但页面是空白的。
---
layout: minimal
title: "#Directors"
permalink: /directors/index.html
description: "Procure por sua director favorita."
---
<div class="directors">
{% assign directors_list = site.director %}
{% if directors_list.first[0] == null %}
{% for director in directors_list %}
<a href="#{{ tag | slugify }}">{{ director }}</a>
{% endfor %}
{% else %}
{% for director in directors_list %}
<a href="#{{ director[0] | slugify }}">{{ director[0] }}</a>
{% endfor %}
{% endif %}
{% assign directors_list = nil %}
</div>
{% for director in site.director %}
<div class="director-wrapper">
<span class="director-title" id="{{ tag[0] | slugify }}">{{ director[0] }}</span>
<ul class="post-list">
{% assign pages_list = director[1] %}
{% for post in pages_list reversed %}
{% if post.title != null %}
{% if group == null or group == post.group %}
<li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%m/%d/%Y" }}</time></a></li>
{% endif %}
{% endif %}
{% endfor %}
{% assign pages_list = nil %}
{% assign group = nil %}
</ul>
</span>
</div>
{% endfor %}
由于代码和概念与填充标签的方式完全相同 - 我不明白为什么这不起作用 - 我希望有人能提供帮助!
这是我的整个目录供参考: https://github.com/howdareyoureview/howdareyoureview.github.io
标签页面使用 site.tags
,这是一个由 Jekyll 在生成时创建的按标签分组的 site.posts
数组。
您正在尝试通过定位 site.directors
进行复制,但此预期数组不存在。但是,您可以使用 group_by 过滤器来实现您的目标。
<div class="directors">
{% assign directors = site.posts | group_by: 'director' | sort: "name" %}
{% for director in directors %}
{% if director.name == "" %}
{% assign name = "Anonymous" %}
{% else %}
{% assign name = director.name %}
{% endif %}
<a href="#{{ name | slugify }}">{{ name }}</a>
{% endfor %}
</div>
{% for director in directors %}
<div class="director-wrapper">
{% if director.name == "" %}
{% assign name = "Anonymous" %}
{% else %}
{% assign name = director.name %}
{% endif %}
<span class="director-title" id="{{ name | slugify }}">{{ name | debug }}</span>
<ul class="post-list">
{% assign pages_list = director.items %}
{% for post in pages_list reversed %}
<li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%m/%d/%Y" }}</time></a></li>
{% endfor %}
</ul>
</span>
</div>
{% endfor %}
提示:您可以使用检查过滤器来调试您的变量。 {{ myvar | inspect }}