以前胡思乱想时,有时会讲给小伙伴们听,有时会将想法在微信上发给自己,但多数时候是没有后文的,让胡思乱想烂在脑中。还好多数时候我记得,就像我亲自记得 3 岁时候的一些故事一样。
但今天大脑被一些凌乱的事情撑爆了,心情极度低落。正好近期学着写博客,于是想把一些胡思乱想的事情写在自己的站点上。
阅读本文,将学到如何用 Jekyll 做多种类型的页面,并在首页的列表中将这些不同种类的页面合并按日期排序。
制作除博客之外的新页面类型
Jekyll 不止支持博客(post)页面类型,也可以支持自定义页面类型。当然博客是它唯一的内建类型(hard-coded type)。
我希望独立于博客写一些其他的胡思乱想的随笔。为了避免影响到正常博客的列表,我决定采用自定义页面类型。
第一步:在 _config.yml 文件中添加自定义页面类型集合
1
2
3
collections:
article:
output: true
其中,article
是我为自定义类型取的名称。
第二步:添加自定义页面类型文件夹
需要在 Jekyll 项目根目录建立一个 _article 文件夹,此名称与第一步的类型名称一致,前面加下划线。
此后,在这个文件夹里放跟 _posts 文件夹中一样规则的文件用于写文章。
(可选)第三步:添加自定义页面类型默认元数据
1
2
3
4
5
6
7
defaults:
- scope:
path: "_article"
type: "article"
values:
layout: "post"
author: "walterlv 吕毅"
这里我让 article 类型使用 post 类型的页面布局。
(可选)第四步:添加自定义页面类型的页面列表
就像 posts 列表的页面一样制作一个 article 列表。
可以参考我的 posts 布局文件和 article 布局文件,两者几乎一样都是可以的,只是 article 遍历的时候使用 site.article
。
制作一个合并了博客和其他页面类型的页面列表
我希望在首页中混杂我的博客和胡思乱想,于是必须将两种不同类型的集合合并。
使用如下代码:
1
2
3
4
5
6
7
8
{% assign all_posts = "" | split: "" %}
{% for article in site.article %}
{% assign all_posts = all_posts | push: article %}
{% endfor %}
{% for post in site.posts %}
{% assign all_posts = all_posts | push: post %}
{% endfor %}
{% assign all_posts = all_posts | sort: date | reverse %}
由于 Jekyll 没有 concat 方法,所以只好一个个地将集合项添加进新集合。集合生成好后,按照日期排序。
此后,遍历以生成列表的时候使用 all_posts
集合即可。
参考资料
- Concat arrays in Jekyll(liquid)
- Sorting & ordering collections · Issue #2515 · jekyll/jekyll
- jekyll - For loops in Liquid: using reversed in conjunction with limit:1 - Stack Overflow
本文会经常更新,请阅读原文: https://blog.walterlv.com/post/jekyll/jekyll-concat.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected]) 。