Skip to content

Instantly share code, notes, and snippets.

@enaeher
Created September 5, 2011 21:49
Show Gist options
  • Save enaeher/88cda643aa7e3b0ca1e5 to your computer and use it in GitHub Desktop.
Save enaeher/88cda643aa7e3b0ca1e5 to your computer and use it in GitHub Desktop.
Tiered Archives plugin
# A quick and dirty plugin for Jekyll by Eli Naeher
#
# This plugin creates a site.years template variable which allow you to group archive links by year and month.
# The structure of site.years is:
# site.years = 2001=>[[post1, post2...], [...]], 2002=>[...]
#
# Usage should look something like this:
# {% for year in site.years %}
# <h2>Year {{ year.first.first.date | date: "%Y" }}</h2>
# {% for month in year %}
# <h3>Month {{ month.first.date | date: "%B" }}</h3>
# {% for post in month %}
# <a href="{{ post.url">{{ post.title }}</a>
# {% endfor %}
# {% endfor %}
# {% endfor %}
class Jekyll::Site
alias :site_payload_without_tiered_archives :site_payload
def site_payload
data = site_payload_without_tiered_archives
data['site']['years'] = TieredArchives::find_years(self.posts.reverse)
data
end
end
module TieredArchives
def self.find_years(posts)
posts.group_by {|post| post.date.year}.values.map {|year| year.group_by {|post| post.date.month}.values};
end
end
@iamstarkov
Copy link

I cannot output post date as day of month; like here http://mnmlist.com/

Can you help me?

@iamstarkov
Copy link

I Found solution:

{% for year in site.years %}
    <h2>{{ year.first.first.date | date: "%Y" }}</h2>
    {% for month in year %}
        <h3>{{ month.first.date | date: "%B" }}</h3>
        <dl>
        {% for post in month %}
            <dt>{{post.date | date: "%d"}}</dt>         
            <dd>
                <a href="{{ post.url}}">{{ post.title }}</a>
            </dd>
        {% endfor %}
        </dl>
    {% endfor %}
{% endfor %}

@arademaker
Copy link

How can I sort the months? In my website, the output of the original suggested code is:

2011
 Maio 
 Novembro
 Junho
 Dezembro
 Fevereiro
 Agosto
 Março
 Setembro
 Abril
 Outubro
2012
 Maio 
 Novembro
 Junho
 Janeiro
 Julho 
 Fevereiro 
 Agosto
 Março
 Setembro 
 Abril 
 Outubro

I am using

        <ul class="list-type2">
          {% for year in site.years %}                                                                                    
          <li>{{ year.first.first.date | date: "%Y" }}
        <ul>
          {% for month in year %}                                                                                       
          <li><a href="/{{ year.first.first.date | localize: '%Y'}}/{{ month.first.date | localize: '%m'}}/">
              {{ month.first.date | localize: "%B" }}</a></li>
          {% endfor %}                                                                                                
        </ul>
              </li>
          {% endfor %}
        </ul>

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