是的,所以我正在尝试做一些简单的事情,这是通过一些文件并打印出内容。这是我的_plugins/test.rb
文件:
module Jekyll
class TestPlugin < Liquid::Tag
def render(context)
Dir.glob("somefolder/*.someextension") do |my_file|
file = File.open(my_file)
contents = file.read
# print contents
end
end
end
end
Liquid::Template.register_tag('testplugin', Jekyll::TestPlugin)
现在考虑env,一个简单的puts contents
会将正确的内容输出到控制台。但是,我希望这只是在通过{% testplugin %}
调用时吐出内容。我尝试了以下组合:
"contents"
#{contents}
#{@contents}
print contents
print "contents"
print #{contents}
print #{@contents}
通过{% testplugin %}
调用时,没有任何内容输出任何内容。当我将Dir.glob
内容替换为"Hello there"
之类的内容时,输出将是正确的。毋庸置疑,我对Ruby非常不熟悉。
答案 0 :(得分:1)
这里的问题是Dir.glob
给出一个区块(正如您已完成的那样)call the block once for each matching filename but then returns nil
。
这意味着您的render
方法实际上并未返回任何内容。
一种解决方案是在没有阻止的情况下调用glob
。然后它将返回匹配文件名的列表,您可以将其映射到文件的内容。
例如,返回所有匹配文件的组合内容:
def render(context)
Dir.glob("somefolder/*.someextension").map do |filename|
File.read(filename)
end.join("\n")
end