jekyll - 在 Jekyll 中按类别显示语言过滤的帖子
问题描述
我使用由 Sylvain Durand制作的 Jekyll 多语言设置来运行多种语言的 Jekyll 博客,而无需使用任何插件。
所有帖子都有以下标记:
---
title: Hello world!
lang: en
ref: hello
---
这些帖子使用正常的文件夹结构:
jekyll
|
-- posts
|
--name-of-post
--name-of-post-2
--name-of-post-3
我有一个名为en.md的页面,其中包含layout: home
和标记,可以正确显示英文帖子,并在home.htmllang: en
中使用以下代码
{% assign posts=site.posts | where:"lang", page.lang %}
<ul>
{% for post in posts %}
<li>
<a href="{{ post.url }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
但我想按类别显示帖子,按语言过滤。
试图通过以下方式实现这一目标:
{% assign posts=site.categories | where:"lang", page.lang %}
<div class="categories">
{% for category in site.categories %}
<li><a name="{{ category | first }}">{{ category | first }}</a>
<ul>
{% for posts in category %}
{% for post in posts %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
{% endfor %}
</ul>
</li>
{% endfor %}
</div>
当我构建时,显示以下消息
Liquid 异常:在 /_layouts/home.html 中没有将 String 隐式转换为 Integer
尝试了许多变体,但似乎没有一个有效。
解决方案
这可以解决问题:
---
Title: English posts
lang: en
---
<ul>
{% for category in site.categories %}
{% comment %}
Here we have something like this
category = Array[
"category1",
[doc1, doc2]
]
{% endcomment %}
{% assign name = category[0] %}
{% assign posts = category[1] %}
{% comment %}
>> This also works
{% assign name = category.first %}
{% assign posts = category.last %}
{% endcomment %}
{% comment %}
>> Filtering posts based on their `lang` variable
>> and on the current `page.lang`
{% endcomment %}
{% assign selectedPosts = posts | where:"lang", page.lang %}
{% comment %}
>> Let's make sure that we need to print something
{% endcomment %}
{% if selectedPosts.size > 0 %}
<li>
Category {{ name }} :
<ul>
{% for post in selectedPosts %}
<li><a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
</li>
{% endif %}
{% endfor %}
</ul>
精简版 :
<ul class="post-list">
{% for c in site.categories %}
{% assign selectedPosts = c.last | where:"lang", page.lang %}
{% if selectedPosts.size > 0 %}
<li>Category {{ c.first }} :
<ul>
{% for post in selectedPosts %}
<li><a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }} - {{ post.lang }}</a></li>
{% endfor %}
</ul>
</li>
{% endif %}
{% endfor %}
</ul>
推荐阅读
- java - 是否可以根据用户输入限制查询结果?
- flutter - 设置子元素的高度等于 Wrap Widget (Flutter) 包含的其他最高元素
- java - 选项卡式活动中的 android 片段中的可绘制错误
- angular - 如何从库中导入组件(在 nrwl/nx 中使用 Angular)
- google-apps-script - 使提交按钮关闭对话框并将焦点返回到电子表格谷歌应用程序脚本
- html - 如何在表单字段中保存和显示先前输入的值?
- php - 带有 Doctrine ORM 的 MappingException - 类不存在
- flutter - 在颤动中按下按钮弹出对话框
- vue.js - 如何在 nuxt.js 中实现 ag-grid
- sapui5 - 在 sapUI5 XML 视图中放置动态表