重写 Jekyll::Site 的 tags 和 categories 方法,将 page 的 categories & tags 收纳进来。
原版的 site.categories / site.tags 只包含 posts (_posts collection 中的带日期的 doc)
- gather_cates_tags.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | module Jekyll class Site # # 将其他 colleciton 中 document 排入 site.categories # def categories_with_pages # 获取 _posts 的 categories, jekyll 自带 cates = categories_without_pages # 将其他 colleciton 中 document 排入 site.categories collections.each do |k, v| next if k == 'posts' v.docs.each do |doc| # Add doc into categories if doc.data['categories'] doc.data['categories'].each do |cate| # category 可以支持 utf-8 中文,在模板中使用 ['chinese-cate']的方式引用 # 例如: cates[cate.force_encoding('utf-8')] << doc end end end end cates end alias_method :categories_without_pages, :categories alias_method :categories, :categories_with_pages # # 将其他 colleciton 中 document 排入 site.tags # def tags_with_pages # 获取 _posts 的 tags, jekyll 自带 tags = tags_without_pages collections.each do |k, v| next if k == "posts" v.docs.each do |doc| if doc.data['tags'] doc.data['tags'].each do |t| tags[t.force_encoding('utf-8')] << doc end end end end tags end alias_method :tags_without_pages, :tags alias_method :tags, :tags_with_pages end end |