_plugins/tiered_archives_plugin.rb (18 lines of code) (raw):

# 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 if Jekyll::VERSION < '3.0.0' posts = self.posts else posts = self.posts.docs end data = site_payload_without_tiered_archives data['site']['years'] = TieredArchives::find_years(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