2

我想在博客文章中包含 HTML 片段,并将代码放在一个地方。在仔细阅读框架后,我已经能够让它工作:

source
  _includes
    custom
      foo.html

{% include custom/foo.html %}

我的问题:有没有办法可以将参数传递给 foo.html?我只是想传入一些字符串并以格式化的方式输出它们,并且无法弄清楚我缺少什么。

谢谢你的时间。

4

2 回答 2

1

没有办法做到这一点,因为 Jekyll 是静态的。根据定义,您可以从一个文件传递到另一个文件的任何内容都是已知值,因为它必须在站点生成时定义。由于您不能传递动态值,因此这种间接方式没有意义,因为您可以将静态值放在它本来应该存在的位置。

如果您有例如生成 10 个大部分相似但略有不同的输出块的用例,则使用插件来完成使用变量隔离这些更改的任务。这为您提供了一些灵活性,同时仍将值放入将使用它的模板中。

这是一个液体标签的例子,它抽象了生成带有特定hrefs的twitter引导导航标签。

module Jekyll
  class XmlJsonTabsTag < Liquid::Tag
    def initialize(tag_name, markup, tokens)
      @methodname = markup.strip 
      super
    end

    def render(context)
      #wondering what this syntax is? google "here document"
      <<-HTML
        <ul class="nav nav-tabs">
            <li class="active">
                <a href="##{@methodname}-json" data-toggle="tab">JSON</a>
            </li>
            <li>
                <a href="##{@methodname}-xml" data-toggle="tab">XML</a>
            </li>
        </ul>
      HTML
    end
  end
end

Liquid::Template.register_tag('xmljsontabs', Jekyll::XmlJsonTabsTag)

@methodname在模板的液体标签中传递要使用的值:

{% xmljsontabs foo %}

输出类似

<ul class="nav nav-tabs">
  <li class="active">
    <a href="#foo-json" data-toggle="tab">JSON</a>
  </li>
  <li>
    <a href="#foo-xml" data-toggle="tab">XML</a>
  </li>
</ul>
于 2013-02-24T02:19:40.213 回答
1

你不能。但是您可以使用其他方式,例如主题所做的事情。

首先,在 in 中设置你想要的格式化样式custom/foo.html,例如我在customfooterin 中添加一个source/_includes/custom/footer.html

<p>
  Copyright &copy; {{ site.time | date: "%Y" }} - {{ site.author }} -
  <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
  {{ site:customfooter }}
</p>

然后,设置您要设置的字符串_config.yml

url: http://fann.im
customfooter: My custom footer, bala bala.

希望这会帮助你。

于 2013-02-22T03:36:26.723 回答