Making multiple post types in Jekyll

Published: Oct 27, 2017 by C.S. Rhymes

Recently I decided to make a new section of my website for short stories. This presented my with a dilemma about how best to make multiple post types using Jekyll and GitHub Pages. I found a few different ways people have done it in the past, but I found Collections were the best way of doing it so I thought I would share how I did it.

Stories

The Collection Directory

Start with creating a new directory in your project, with the name starting with an underscore. I named my collection stories to I created a directory called _stories.

Configuration

Next, update your _config.yml file with a new collections section, and under that add your collection name, this time without the underscore, in my example stories. Then, assuming you want to output each of your stories as a separate page, add output: true.

The below shows what was added.

collections:
  stories:
    output: true

Creating Pages and a Layout

Now you can start creating pages within your collection directory (_stories). It looks like either html or markdown format works, but I created mine as markdown so I could make use of a template.

I created a new template for stories as I wanted them to be a bit different from standard blog post pages. I created a story.html file in the _layouts directory. This template can be as simple as you want, as all it really needs are the {{ title }} and {{ content }} placeholders. I added some front matter to the story.html in layouts so it inherited the default layout, but you can edit this to suit your site layout.

Below is an example of a simple layout for your collection pages.

---
layout: default
---

<h1>{{ title }}</h1>
{{ content }}

Now we get to your collection content pages. All you need to do is create a separate markdown page per content page with the following front matter, layout, title and description.

---
layout: story
title: Story Title Goes Here
description: "The story description text goes here"
---

Then write your content underneath in markdown as you would on a post.

Creating an Index Page

Lastly, you probably want a way of getting to your collection pages. I created a stories.html page in the site root to act as the index page for the stories. If you prefer you can create a directory called stories and put an index.html page in there instead.

The documentation says you can create a page in the _stories directory and give it a permalink but for me this made it appear in the loop below as well so it was linking to itself.

Anyway, you can loop through the pages in the collection using a simple for loop in your stories.html page as per below.

{% for item in site.stories %}
  <h2>{{ item.title }}</h2>
  <p>{{ item.description }}</p>
  <p><a href="{{ item.url }}">{{ item.title }}</a></p>
{% endfor %}

Hopefully this is all the information you need to start creating multiple post types using Jekyll and GitHub pages. My site is all set up. Now I need to do is to start writing some stories

Share

Latest Posts

Using prettier to format your Jekyll theme
Using prettier to format your Jekyll theme

I have been using prettier for a few years to automatically format code, especially JavaScript and TypeScript projects, as it helps standardise the output on a shared code project. I have maintained a few different Jekyll themes over the years and wanted to use the power of prettier to automatically format code consistently.

First impressions of React Native as a Web Developer
First impressions of React Native as a Web Developer

I decided to try out React Native to build a native app and see how it works. I’m an experienced web developer but have limited knowledge of apps. I helped build an app using Apache Cordova and PhoneGap many (many) years ago and also worked on another app using the ionic framework a few years later. If I’m honest I can’t really remember how they worked as it was so long ago, so it was kind of like starting fresh for me.

Querying Laravel Eloquent's Many to Many relationships
Querying Laravel Eloquent's Many to Many relationships

A while ago I wrote about how to use a many to many relationship in Laravel, (all the way back in April 2019). Now I want to build on this example and show how you can query many to many relationships, but also how you can add additional constraints to the query to further filter your results.

How NOT to make a website

How NOT to make a Website

By C.S. Rhymes

From £2.49

Nigel's Intranet Adventure

Nigel's Intranet Adventure

By C.S. Rhymes

From £0.99