如何在Jekyll的YAML前端添加Liquid标签?

时间:2015-08-16 23:31:41

标签: yaml jekyll liquid jekyll-extensions

我正在使用plugin来计算基于Google Analytics的帖子和网页的网页浏览量。要显示页面查看计数,我使用的是Liquid标签{% pageview %}。有没有办法将这些数据添加到YAML前端,所以可以通过类似{{ page.views }}的其他页面上的热门帖子列表进行访问?

以下是插件中Liquid标签的代码:

class PageViewTag < Liquid::Tag

  def initialize(name, marker, token)
    @params = Hash[*marker.split(/(?:: *)|(?:, *)/)]
    super
  end

  def render(context)
    site = context.environments.first['site']
    if !site['page-view']
      return ''
    end

    post = context.environments.first['post']
    if post == nil
      post = context.environments.first['page']
      if post == nil
        return ''
      end
    end

    pv = post['_pv']
    if pv == nil
      return ''
    end

    html = pv.to_s.reverse.gsub(/...(?=.)/,"\\&\u2009").reverse
    return html
  end #render
end # PageViewTag

如何而不是注册Liquid标签将此数据合并到帖子的数据(集合中的文档)?并通过{{ page.views }}使用。

2 个答案:

答案 0 :(得分:1)

您可以使用generator plugin在帖子或页面中添加一些data['views']

答案 1 :(得分:1)

以下是我制作的插件的代码:

require 'jekyll'

module Jekyll
  class PageviewsData < Jekyll::Generator
    safe :true
    priority :low

    def generate(site)
      # require ga-page-view plugin
      if !site.config['page-view']
        return
      end

      site.collections.each  do |label, collection|
        collection.docs.each { |doc|
          pv = doc.data['_pv']
          views = pv.to_s.reverse.gsub(/...(?=.)/,"\\&\u2009").reverse
          doc.data.merge!('views' => views)
        }
      end
    end
  end
end