Skip to content

Instantly share code, notes, and snippets.

@snrbrnjna
Created November 29, 2013 20:24
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snrbrnjna/7711441 to your computer and use it in GitHub Desktop.
Save snrbrnjna/7711441 to your computer and use it in GitHub Desktop.
To exclude some configurable posts from Jekyll's default pagination on index.html pages
module Jekyll
module Generators
class Pagination
# Monkey patch this method to exclude some cats and tags from all standard
# paginators
#
# For this to take effect, you have to define a ``exclude_home`` property in your _config.yml:
#
# exclude_home:
# categories: [notes]
# tags: [hidehome]
#
def paginate(site, page)
all_posts = _exclude_posts(site)
pages = Pager.calculate_pages(all_posts, site.config['paginate'].to_i)
(1..pages).each do |num_page|
pager = Pager.new(site, num_page, all_posts, pages)
if num_page > 1
newpage = Page.new(site, site.source, page.dir, page.name)
newpage.pager = pager
newpage.dir = Pager.paginate_path(site, num_page)
site.pages << newpage
else
page.pager = pager
end
end
end
def _exclude_posts site
posts = site.site_payload['site']['posts']
if (config=site.config['exclude_home'])
cats = config['categories']; tags = config['tags']
posts.reject! do |post|
reject = false
if cats.is_a?(Array)
cats.each do |excat|
if post.categories.include?(excat)
reject = true
break
end
end
end
if !reject && tags.is_a?(Array)
tags.each do |extag|
if post.tags.include?(extag)
reject = true
break
end
end
end
reject
end
end
posts
end
end
end
end
@devinhalladay
Copy link

For some reason, the latest version of Jekyll is throwing this error when I try to generate my site:

Generating... error: undefined method `[]' for #<Jekyll::Site:0x007f8a238293f8>. Use --trace to view backtrace

When I trace the error I get this:

      Generating... /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/generators/pagination.rb:109:in `initialize': undefined method `[]' for #<Jekyll::Site:0x007ffa6c0b0270> (NoMethodError)
    from /Users/devin/Sites/devinhalladay.com/_plugins/exclude_home.rb:17:in `new'
    from /Users/devin/Sites/devinhalladay.com/_plugins/exclude_home.rb:17:in `block in paginate'
    from /Users/devin/Sites/devinhalladay.com/_plugins/exclude_home.rb:16:in `each'
    from /Users/devin/Sites/devinhalladay.com/_plugins/exclude_home.rb:16:in `paginate'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/generators/pagination.rb:14:in `block in generate'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/generators/pagination.rb:13:in `each'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/generators/pagination.rb:13:in `generate'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/site.rb:218:in `block in generate'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/site.rb:217:in `each'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/site.rb:217:in `generate'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/site.rb:43:in `process'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/command.rb:18:in `process_site'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/commands/build.rb:23:in `build'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/lib/jekyll/commands/build.rb:7:in `process'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/jekyll-1.0.4/bin/jekyll:85:in `block (2 levels) in <top (required)>'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/commander-4.1.5/lib/commander/command.rb:180:in `call'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/commander-4.1.5/lib/commander/command.rb:180:in `call'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/commander-4.1.5/lib/commander/command.rb:155:in `run'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/commander-4.1.5/lib/commander/runner.rb:402:in `run_active_command'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/commander-4.1.5/lib/commander/runner.rb:78:in `run!'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/commander-4.1.5/lib/commander/delegates.rb:7:in `run!'
    from /Users/devin/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/commander-4.1.5/lib/commander/import.rb:10:in `block in <top (required)>'

Any idea if I can fix this?

@devinhalladay
Copy link

Never mind, I fixed it. Somehow my Jekyll version got all screwed up.

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