Jekyll - 从 Liquid 访问插件对象
Jekyll - access plugin object from Liquid
我有一个图像列表,我在其中 运行 mini_exiftool
从图像(EXIF 和 IPTC)中提取各种属性。我已经成功创建了一个 LiquidTag。它接受我想要的 path 和 EXIF 属性,并且 returns 作为(我假设的)a字符串。
但是,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)
根据您对插件的描述,我认为它可以满足您的需求。插件 returns 来自(一张照片?)的特定 属性 和 returns 它作为一个字符串。
但听起来您只想使用一次并将其存储在其他地方。在这种情况下,您可能需要考虑做一些不同的事情。 Esp 当你说 属性 读数很慢时。
例如,您可以使用生成器根据 运行 之前的所有图像创建所需的数据。生成器详情: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 或类似工具生成数据文件。
如果我的问题有误,请告诉我,我会相应地更新我的答案。
我有一个图像列表,我在其中 运行 mini_exiftool
从图像(EXIF 和 IPTC)中提取各种属性。我已经成功创建了一个 LiquidTag。它接受我想要的 path 和 EXIF 属性,并且 returns 作为(我假设的)a字符串。
但是,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)
根据您对插件的描述,我认为它可以满足您的需求。插件 returns 来自(一张照片?)的特定 属性 和 returns 它作为一个字符串。
但听起来您只想使用一次并将其存储在其他地方。在这种情况下,您可能需要考虑做一些不同的事情。 Esp 当你说 属性 读数很慢时。
例如,您可以使用生成器根据 运行 之前的所有图像创建所需的数据。生成器详情: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 或类似工具生成数据文件。
如果我的问题有误,请告诉我,我会相应地更新我的答案。