如何在Jekyll中创建每个帖子的排序类别(作为插件; Ruby)

时间:2014-01-06 10:21:38

标签: ruby sorting jekyll

我有一个使用Jekyll的网站,我想要对我的类别进行排序。我成功地按以下方式对所有类别进行了排序:

module Jekyll
  class SortedCategoriesBuilder < Generator
    safe true
    priority :high

    def generate(site)
      site.config['sorted_categories'] = site.categories.sort { |a,b| a[0] <=> b[0] }
    end   
  end
end

在插件sorted_categories.rb中。这创建了site.sorted_categories。现在我还要为每个帖子分类。我想通过添加

为site.posts中的每个帖子添加一个post.sorted_categories
  for post in site.posts
    post.class.module_eval { attr_accessor :sorted_categories } 
    post.sorted_categories = post.categories.sort { |a,b| a[0] <=> b[0] }
  end

到上面的代码,但它不起作用。

(我知道如何直接在帖子中对类别进行排序,但我想知道它是如何作为插件工作的)

如何更正代码,以便它可以正常工作?也许,我完全不了解Jekyll的内部结构,所以我也对其他(优雅)解决方案持开放态度。

1 个答案:

答案 0 :(得分:1)

通过使用提到的in this question解决方法,可以使用以下方法:

module Jekyll
  class Post
    def sorted_categories
      self.categories.sort { |a,b| a[0] <=> b[0] }
    end

    def to_liquid(attrs = ATTRIBUTES_FOR_LIQUID)
      super(attrs + %w[
      sorted_categories
    ])
    end
  end
end