如何从Jekyll的Liquid块生成文件?

时间:2012-08-25 19:03:41

标签: plugins jekyll liquid

我正在编写一个plugin来定义一个新的Jekyll块ditaa。块中的任何内容都应从Ditaa markup转换为图像文件,并将该图像插入到帖子中而不是块中。生成文件有效,但在_site目录中复制或生成时,文件显然已删除。

是否有适当/更好的方法来实现生成自定义资产的块插件?

3 个答案:

答案 0 :(得分:1)

我还没有找到 这样做的正确方法,但有一种方法可行。该解决方案可以在GitHub上找到,并使用Jekylls功能将任何没有前缀的下划线复制到_site目录。但是,这种方法也有两个缺点:

  1. “source”目录被自动生成的文件污染
  2. 没有自动重新生成的部署有点尴尬,因为在 Jekyll已经复制了所有文件之后,生成了图像。所以第二次Jekyll跑是必要的。

答案 1 :(得分:1)

我找到了正确的解决方案:使用Jekyll::StaticFile

当您将此类的一个对象添加到site.static_files数组时,您将此文件标记为待处理,以便在完成渲染过程后复制。实际上,此类文件的副本是在site.write进程中完成的。查看Jekyll安装中的site_process.rb文件。

这门课的用法很简单。当您需要标记文件以供将来复制时,您只需执行如下代码:

site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)

pathfilename取决于src文件夹中文件的位置。

我在开发LaTeX时遇到了类似的问题 - &gt; PNG液体标签。您可以在GitHub上查看我的代码:https://github.com/fgalindo/jekyll-liquid-latex-plugin

答案 2 :(得分:1)

我找到了答案。

替换此

site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)

gnufile = GNUplotFile.new(site, site.source, "_site/media/", "#{@file}")
gnufile.givemethecommands commands
site.static_files << gnufile 

并创建一个继承Jekyll :: StaticFile

GNUplotFile
class GNUplotFile < Jekyll::StaticFile
  def write(dest)
    puts "WRITE---->>>>>>>>>>>"
    #File.write('_site/media/BTTTTT.svg', DateTime.now)
    gnuplot(@commands)
    # do nothing
  end
  def gnuplot(commands)
    IO.popen("gnuplot", "w") { |io| io.puts commands }
  end
  def givemethecommands(commands)
    @commands = commands
  end
end 

write命令在清理过程之后运行。我只有一个Liquid块和上面的代码。