【问题标题】:Jekyll - access plugin object from LiquidJekyll - 从 Liquid 访问插件对象
【发布时间】:2017-04-10 16:11:06
【问题描述】:

我有一个图像列表,我在上面运行mini_exiftool 以从图像中提取各种属性(EXIF 和 IPTC)。我已经成功创建了一个 LiquidTag。它接受我想要的 pathEXIF 属性,并将其作为(我假设是)字符串返回。

但是,mini_exiftool 很慢。目前我在每张图片中多次插入标签。我想为每个图像运行一次并将所有数据(数组?对象?)存储在一个变量中。小小的免责声明 - 除了我试图理解这个问题所学的知识之外,我几乎不知道任何 Ruby。

这是我使用插件的方式:

{% exif path, title %}
{% exif path, lens %}

这是插件,网上找到的猜测和代码的大杂烩:

require 'mini_exiftool'

module Jekyll
  class Exif < Liquid::Tag
    def initialize(tag_name, params, token)
      super
      args = params.split(",").map(&:strip)
      @filename = args[0]
      @property = args[1]
    end
    def lookup(context, name)
      lookup = context
      name.split(".").each { |value| lookup = lookup[value] }
      lookup
    end
    def render(context)
      path = lookup(context, @filename)
      exif = MiniExiftool.new(path)
      return exif[@property]
    end
  end
end

Liquid::Template.register_tag('exif', Jekyll::Exif)

【问题讨论】:

    标签: ruby jekyll liquid


    【解决方案1】:

    根据您对插件的描述,我会说它可以满足您的需求。该插件从(照片?)返回一个特定属性,并将其作为字符串返回。

    但这听起来就像您只想将其存储一次并将其存储在其他地方。在这种情况下,您可能需要考虑做一些不同的事情。特别是当你说属性读取很慢时。

    例如,您可以使用生成器在运行前根据所有图像创建所需的数据。生成器详情:http://jekyllrb.com/docs/plugins/#generators

    您可以采用类似于我对语言排序的方法:

    class Generator < Jekyll::Generator
        def generate(site)
    
          site.data['news-en'] = Array.new
          # Do something with exif and push a value object:
          site.data['news-en'].push(p)
    

    然后数据就可以在您的站点数据对象中使用。它可以像这样访问:

    {% for post in site.data['news-en'] %}

    请在此处查看数据文件文档:http://jekyllrb.com/docs/datafiles/

    但是,如果您真的不是一直添加大量照片而是定期更新其他文本帖子,您甚至可能想要离开 Jekyll 并使用 Gulp/Grunt 或类似工具来生成数据文件。

    如果我把你的问题弄错了,请告诉我,我会相应地更新我的答案。

    【讨论】:

    • 感谢您的回复!我会阅读发电机,我认为这可能会解决我的问题。我更新了我的问题,有点不清楚,你猜对了大多数帐户。 ;-)
    • 很高兴听到 Henrik。如果你对 Jekyll 有更深的兴趣,我现在做一些无耻的自我推销,并给你这个链接到我目前正在进行的图书项目(当我有时间时:-)):jekyll.io
    • 由于我已经在使用 shell 脚本来处理文件,因此我能够在此处添加对 exiftool 的额外调用并将其输出到 JSON 数据文件。如果我在 jekyll 运行时需要数据,我会使用生成器。现在我拥有所有数据和零开销。干杯!
    • Henrik 听起来不错。很高兴你把它整理出来。也感谢您采纳答案!
    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多