Skip to content

Instantly share code, notes, and snippets.

@Phlow
Last active April 30, 2024 13:30
Show Gist options
  • Save Phlow/1f27dfafdf2bbcc5c48e to your computer and use it in GitHub Desktop.
Save Phlow/1f27dfafdf2bbcc5c48e to your computer and use it in GitHub Desktop.
This Liquid loop for Jekyll sorts a collection by date in reverse order
{% comment %}
*
* This loop loops through a collection called `collection_name`
* and sorts it by the front matter variable `date` and than filters
* the collection with `reverse` in reverse order
*
* To make it work you first have to assign the data to a new string
* called `sorted`.
*
{% endcomment %}
<ul>
{% assign sorted = site.collection_name | sort: 'date' | reverse %}
{% for item in sorted %}
<li>{{ item.title }}</li>
{% endfor %}
</ul>
@sylhare
Copy link

sylhare commented Apr 29, 2019

According to Liquid Documentation, now you can just do:

{% for item in site.collection_name reversed %}

I tried it on my theme and both methods give the same output. 😉

@ccfz
Copy link

ccfz commented Sep 25, 2019

I needed the collection to be sorted based on a specific date. Here is my code:

{% assign sortedWorkshops = site.workshops | sort: 'start_date' | reverse %}

      {% for workshop in sortedWorkshops %}

...

@timothy-kodes
Copy link

Great! I cannot found it from official site and github repository of jekyll! Thanks!
What I changed is:

{% assign projects = (site.projects | sort: 'date') | reverse %}

to

{% assign mid = site.projects | sort: 'date' %}
{% assign projects = mid | reverse %}

since I faced with the following message:

Liquid Warning: Liquid syntax error (line 1): Expected dotdot but found pipe in "{{(site.projects | sort: 'date') | reverse }}" in projects.html

It gives this error because you cannot use parenthesis

@Phlow
Copy link
Author

Phlow commented Jul 27, 2020

It works now without parenthesis.

<ul>
    {% assign sorted = site.projekte | sort: 'date' | reverse %}
    {% for item in sorted %}
    <li>{{ item.title }}</li>
    {% endfor %}
</ul>

@kuz3
Copy link

kuz3 commented Aug 3, 2020

ty!

@puppylpg
Copy link

puppylpg commented Sep 4, 2020

👍

@iamalfonse
Copy link

Thanks so much for this, seriously 👍

@Phlow
Copy link
Author

Phlow commented Oct 21, 2020

@iamalfonse Your‘re welcome. This is how I feel, if I find useful code snippets :)

@NixImagery
Copy link

Thanks, saved me screwing it up in a hurry. Elegant solution.

@Phlow
Copy link
Author

Phlow commented Dec 19, 2020

@NixImagery You're welcome. That's what gists are for :)

@NavidFehren
Copy link

Great, thank you so much!!

@Phlow
Copy link
Author

Phlow commented Jan 23, 2021

@NavidFehren You‘re welcome.

@ds-package
Copy link

Thank you so much!!!

@Phlow
Copy link
Author

Phlow commented May 11, 2021

@minheeyoon You‘re welcome. 😸

@wdzajicek
Copy link

The date key is now default

As of Jekyll > v4.0.0 date, is the default key used for sorting collection items (provided the collection items have date keys.) The original liquid variable-assignment can be shortened:

<!-- `| sort: 'date '` can be omitted -->
{% assign sorted = site.collection_name | sort: 'date' | reverse %}
<!-- This will accomplish the same thing  -->
{% assign sorted = site.collection_name | reverse %}

By default, two documents in a collection are sorted by their date attribute when both of them have the date
key in their front matter. However, if either or both documents do not have the date key in their front matter,
they are sorted by their respective paths.
https://jekyllrb.com/docs/collections/#custom-sorting-of-documents

See Custom Sorting of Documents on the Collections page of Jekyll docs for more info.

@Phlow
Copy link
Author

Phlow commented Sep 3, 2021

I haven't tested your suggestion. But you write provided the collection items have date keys.

I think for being save it doesn't hurt, in case no date is associated, it doesnt count. What do you think?

@prabhav
Copy link

prabhav commented Oct 11, 2021

Thanks so much for sharing this!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment