Today I learned:
Upgrading Jekyll from 2.x to 3.x
- The upgrade itself is simple: In Terminal, run
gem update jekyll
. Usesudo
if you run into permissions issues like I did. - If you use pagination in any of your templates, you’ll now have to add
gems: [jekyll-paginate]
to the# Plugins
section of your_config.yaml
or else your site won’t compile. This wasn’t necessary in 2.x.
Making an index for my TIL posts in Liquid
I wanted to have an index for my TIL posts that was organized in two ways: reverse chronologically and by tag. Here is how I’m handling that with Liquid:
### Recent TIL Posts
<ul>
{% for post in site.categories['TIL'] %}
<li>
<span class="til-date">{{ post.date | date: '%d %b %y' }}</span>: <a href="{{ post.url }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
---
### TIL posts by category
{% for tag in site.tags %}
{% assign t = tag | first %}
{% assign posts = tag | last %}
#### {{ t }}
<ul>
{% for post in posts %}
{% if post.tags contains t %}
<li>
<span class="til-date">{{ post.date | date: '%d %b %y' }}</span>: <a href="{{ post.url }}">{{ post.title }}</a>
</li>
{% endif %}
{% endfor %}
</ul>
{% endfor %}
Notes:
- The general structure of the tags method comes from Joe Kampschmidt. I started searching when it didn’t work the same way as the categories method I wrote earlier.
- This method for displaying tags works because I’m only tagging my TIL posts. Everything else goes into categories. If I were to tag other kinds of posts, I’d need to first limit by posts in
site.categories['TIL']
- Category names are case sensitive.
- You can display raw Liquid markup without it rendering by wrapping it in {%raw%} and {%endraw%}.