合并 Jekyll 多种类型的页面

合并 Jekyll 多种类型的页面

发布于 2017-10-12 15:48 更新于 2018-08-12 06:49

以前胡思乱想时,有时会讲给小伙伴们听,有时会将想法在微信上发给自己,但多数时候是没有后文的,让胡思乱想烂在脑中。还好多数时候我记得,就像我亲自记得 3 岁时候的一些故事一样。

但今天大脑被一些凌乱的事情撑爆了,心情极度低落。正好近期学着写博客,于是想把一些胡思乱想的事情写在自己的站点上。

阅读本文,将学到如何用 Jekyll 做多种类型的页面,并在首页的列表中将这些不同种类的页面合并按日期排序。


制作除博客之外的新页面类型

Jekyll 不止支持博客(post)页面类型,也可以支持自定义页面类型。当然博客是它唯一的内建类型(hard-coded type)。

我希望独立于博客写一些其他的胡思乱想的随笔。为了避免影响到正常博客的列表,我决定采用自定义页面类型。

第一步:在 _config.yml 文件中添加自定义页面类型集合
collections:
  article:
    output: true

其中,article 是我为自定义类型取的名称。

第二步:添加自定义页面类型文件夹

需要在 Jekyll 项目根目录建立一个 _article 文件夹,此名称与第一步的类型名称一致,前面加下划线。

此后,在这个文件夹里放跟 _posts 文件夹中一样规则的文件用于写文章。

(可选)第三步:添加自定义页面类型默认元数据
defaults:
  - scope:
      path: "_article"
      type: "article"
    values:
      layout: "post"
      author: "walterlv 吕毅"

这里我让 article 类型使用 post 类型的页面布局。

(可选)第四步:添加自定义页面类型的页面列表

就像 posts 列表的页面一样制作一个 article 列表。

可以参考我的 posts 布局文件和 article 布局文件,两者几乎一样都是可以的,只是 article 遍历的时候使用 site.article

制作一个合并了博客和其他页面类型的页面列表

我希望在首页中混杂我的博客和胡思乱想,于是必须将两种不同类型的集合合并。

使用如下代码:

{% 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 集合即可。


参考资料

本文会经常更新,请阅读原文: https://walterlv.com/post/jekyll/jekyll-concat.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (walter.lv@qq.com)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

Python的初学者你现在可以自己“看”到代码的运行了!

最近小编一直在给群里小伙伴解决各种的错误,尤其是对一些基础薄弱的同学来说,出现错误后更是一脸懵逼!直到有一天,小编找到了Python Tutor,终于解脱了。 ...

2266
来自专栏UDNZ

【译】Go 语言实践:编写可维护的程序的建议

本文为 QCon 2018 上海站主题演讲嘉宾、Heptio 资深工程师、著名 Go 语言专家 David Cheney 关于 Go 语言实践的英文分享。为方便...

5148
来自专栏吉浦迅科技

DAY41:阅读Synchronization Functions

waits until all threads in the thread block have reached this point and all glob...

853
来自专栏我的博客

原生JavaScript第一天

首先:感谢李炎恢老师的无私奉献 其次:下面的学习总结都是根据李炎恢老师的视频以及参考网络资料编写,转载请注明出处:http://www.0377joyous.c...

2904
来自专栏coding for love

JS常用设计模式解析02-策略模式

在于都本文之前,希望大家能够先阅读以下JS进阶系列03-JS面向对象的三大特征之多态这篇文章,了解JS的多态。在这篇文章,我们举了一个例子,就是选拔官员选拔合唱...

1143
来自专栏FreeBuf

如何绕过电子邮件格式过滤进行SQL注入

前不久,我加入了一家印度尼西亚金融科技公司的bug赏金计划。经过一番测试,我在“忘记密码”功能中找到了一个电子邮件输入框。依据经验,我开始尝试以下输入。

1172
来自专栏农夫安全

高级PHP应用程序漏洞审核技术【一】

前言 小编入门代码审计时看的几篇写的比较经典的PDF文档之一,分享出来希望能帮助到想学习代码审计的小伙伴。 [目录] 1. 前言 2. 传统的代码审计技...

48911
来自专栏撸码那些事

我看依赖注入

1543
来自专栏java达人

说说JSON和JSONP( 含jquery例子)

说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义...

2955
来自专栏程序员的知识天地

用 Python 抓网页,你想问的都帮答好了,你还有不懂的吗?

近年来,随着大数据、人工智能、机器学习等技术的兴起,Python 语言也越来越为人们所喜爱。但早在这些技术普及之前,Python 就一直担负着一个重要的工作:自...

1493

扫码关注云+社区

领取腾讯云代金券