如何在Liquid :: Tag类中获取Octopress插件的帖子类别

时间:2013-08-19 19:20:38

标签: liquid octopress

我有这段代码:

module Jekyll
  class ConnexeTag < Liquid::Tag
    def render(context)
      categories = get_categories(context)
      categories.class.name # => "Array"
      # categories # => "category1category2"
      # categories.join(',') # => Error !
      # categories.size # => Error !
    end

    private

    def get_categories(context)
      context.environments.first["page"]["categories"]
    end
  end
end

它输出数组,没关系。但是,当我在categories上尝试某些方法时,例如size或。{ each我收到此错误:

Building site: source -> public
Liquid Exception: undefined method `size' for nil:NilClass in atom.xml
/home/xavier/octopress/plugins/connexe_tag.rb:25:in `render'

我无法在categories上应用任何方法。 有谁能告诉我这里做错了什么?

1 个答案:

答案 0 :(得分:2)

令人高兴的是,修复很简单。问题是您的代码假定每个页面都有一个类别数组。对于atom.xml不是这种情况,因此context.environments.first["page"]["categories"]将返回nil,当然,它没有方法'size'。如果get_categories返回一个值并且你已全部设置,则可以将其设置为仅输出。

module Jekyll
  class ConnexeTag < Liquid::Tag
    def render(context)
      categories = get_categories(context)

      # return a list of categories for pages which have them
      categories.join(', ') if categories
    end

    private

    def get_categories(context)
      context.environments.first["page"]["categories"]
    end
  end
end


Liquid::Template.register_tag('connexe_tag', Jekyll::ConnexeTag)

应该这样做。