Aggregating posts with jekyll using a custom variable

Setting up a custom variable on your posts that makes it really easy to aggregate posts on a page

2017-05-02

Metadata
Aggregating posts with jekyll using a custom variable
Setting up a custom variable on your posts that makes it really easy to aggregate posts on a page
2017-05-02
this-site
./jekyll.jpg
/2017/05/02/jekyll-post-aggregation.html/2017/05/02/jekyll-post-aggregation
jekyllruby

Jekyll makes it super easy to create pages and posts and then loop over them to render lists of them. There are a few commands that you can utilize in Liquid to narrow down that list for only rendering a subset of posts or pages. Those are assign and where statements.

The assign statement lets you create new variables that can be referenced on that page as well as any include that happens on that page. And the where statement is a way to narrow down a list to a subset of that list for use in the assign statement.

To use the assign statement you simply do

{% assign my_posts = site.posts %}

Now the variable my_posts will contain all of the site's posts and you can loop over it just as you would with site.posts

{% for post in my_posts %}
  ...
{% endfor %}

A where statement lets you narrow down a list during an assignment

{% assign my_posts = site.posts | where:'title', 'Awesome Title' %}

This will make my_posts a list of posts where the title of the post is Awesome Title.

A lot of things I work on in my free time are parts of a larger project I'm working on. These are represented by my project pages which are an aggregation of all posts related to a specific project. assign and where enabled the posts to be scoped to a specific project. For example, this post is scoped to the Website Overhaul project.

For each project I start, there is a corresponding "project" page. That page will then render a list of all posts that are about that project.

<!-- give me just the posts that have a variable named project, that match this project page's project name -->
{% assign tiles = site.posts | where: 'project', page.project %}
{% include tiles.html %}