Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Jekyll-从Liquid访问插件对象_Ruby_Jekyll_Liquid - Fatal编程技术网

Ruby Jekyll-从Liquid访问插件对象

Ruby Jekyll-从Liquid访问插件对象,ruby,jekyll,liquid,Ruby,Jekyll,Liquid,我有一个图像列表,我在上面运行mini_exiftool从图像中提取各种属性(EXIF&IPTC)。我已成功创建LiquidTag。它接受我想要的路径和EXIF属性,并将其作为字符串返回(我假设是字符串) 但是,mini_exiftool速度很慢。目前,我在每个图像中插入标记多次。我希望每个图像运行一次,并将所有数据(数组?对象?)存储在一个变量中。小免责声明-我几乎不知道任何Ruby,除了我在试图理解这个问题时学到的东西 以下是我使用插件的方式: {% exif path, title %}

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

但是,
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)
需要“mini_exiftool”
杰基尔模块
类Exif
从您对插件的描述来看,我想说它符合您的要求。插件从(照片?)返回特定属性,并以字符串形式返回

但听起来你只想把它保存一次,然后把它存放在别的地方。在这种情况下,你可能会考虑做一些不同的事情。特别是当你说属性读取缓慢时

在示例中,您可以使用生成器根据运行前的所有图像创建所需的数据。发电机详情:

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

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)
类生成器 def生成(站点) site.data['news-en']=Array.new #使用exif执行某些操作并推送值对象: site.data['news-en'].push(p) 然后,这些数据在站点数据对象中可用。可通过以下方式访问:


{%用于站点中的帖子。数据['news-en']%}

请参见此处的数据文件文档:

然而,如果你真的没有一直添加大量照片,而是定期更新其他文字帖子,那么你甚至可能想离开Jekyll,使用Gulp/Grunt或类似工具生成数据文件


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

谢谢您的回复!我会仔细阅读发电机,我想这可能会解决我的问题。我更新了我的问题,有点不清楚,你在大多数情况下都猜对了很高兴听到这个消息,亨里克。如果你对Jekyll有更深的兴趣,我现在会做一些无耻的自我宣传,并给你我目前正在做的一个图书项目的链接(当我有时间:-):因为我已经在使用shell脚本来处理文件,所以我能够在那里添加一个额外的exiftool调用,并将其输出到一个JSON数据文件。如果我在jekyll运行时需要数据,我会使用生成器。现在我有了所有的数据和零开销。干杯听起来不错,亨里克。很高兴你解决了。也谢谢你接受答案!