Ruby 无法从Jekyll插件修改site.tags

Ruby 无法从Jekyll插件修改site.tags,ruby,jekyll,Ruby,Jekyll,我正在开发一个插件来帮助多语言的Jekyll网站,作为这项工作的一部分,我必须根据他们的语言对帖子进行分类 我试图根据帖子的语言对帖子进行标记,因此我覆盖了aggregate\u post\u info方法,但是当我打印site.tags变量时,它是空的 module Jekyll class Site alias_method :_aggregate_post_info, :aggregate_post_info def aggregate_post_

我正在开发一个插件来帮助多语言的Jekyll网站,作为这项工作的一部分,我必须根据他们的语言对帖子进行分类

我试图根据帖子的语言对帖子进行标记,因此我覆盖了
aggregate\u post\u info
方法,但是当我打印
site.tags
变量时,它是空的

module Jekyll
    class Site

        alias_method :_aggregate_post_info, :aggregate_post_info
        def aggregate_post_info(post)
            _aggregate_post_info(post)
            @tags[post.data['lang']] << post
        end

    end
end
模块杰基尔
课堂现场
别名\方法:\聚合\发布\信息,:聚合\发布\信息
def聚合发布信息(发布)
_汇总发布信息(发布)

@标记[post.data['lang']]您可以简单地将post语言添加为标记,即
标记:[english、ruby等]
,完全避免了猴子补丁。因此,当您只想显示带有
lang
-标记的帖子时,只需过滤它们:

<ul class="posts">
{% for post in site.tags.english %}
  <li>
    <a href="{{ post.url }}">{{ post.title }}</a>
  </li>
{% endfor %}
</ul>
    {site.tags.english%}
  • {%endfor%}

这样,大部分工作都由杰基尔完成,为您节省了一些时间和精力。:)

我通过定义自己的语言特定变量实现了类似的功能,如下面的简化示例:

for post in site.posts.docs do
    lang = post.data['lang']
    for tag in post.data['tags'] do
        slug = jekyll_tagging_slug(tag)
        site.config['t'][lang]['tagnames'] = slug
    end
end

我还自动生成标记页(以及使用不同方法而不使用插件的类别页),避免多种语言的名称冲突,并预计算聚合计数以获得更好的性能。整个事情都在两篇博文中进行了描述。

实际上,这与节省我的时间和精力完全相反。我希望我的插件能够自动标记帖子,而不是我自己做。