如何在Jekyll的Liquid模板中比较字符串大小/长度?

时间:2013-05-26 19:04:19

标签: github template-engine jekyll liquid

我在GitHub页面上使用Jekyll来构建一个博客,并希望在每个帖子中获取传递给YAML前端内容中的Liquid Template的page.title字符串的长度。我还没有找到一个简单的方法来做到这一点。查看Liquid For Designers Guide我能够看到它支持两种类型的标记:

  • 输出标记 - 由双花括号{{ }}分隔,您可以输出传递给模板的变量,或者在YAML前端内容中{{1}在Jekyll中,或page.title中的全局站点级变量。要输出帖子或页面的标题,请使用_config.yml

  • 标记标记 - 由花括号和百分数{{ page.title }}分隔,这些用于模板中的逻辑。如果语句,循环,那种类型的东西。

显然有很多过滤器可以与输出标记一起使用,您可以使用{% %}输出传递给模板的字符串的长度。

但是,我想在模板中执行的操作是使用{{ page.title | size }}<h1><h2>标题呈现页面标题,具体取决于标题的长度

无论如何我无法弄清楚标记标记和输出标记的混合。

我可以使用<h3>page.title的大小输出到页面上,但我不能弄清楚如何在if语句中使用长度。这也返回一个字符串表示而不是数字。

对Liquid有更多经验的人是否知道如何做到这一点?

理想情况下,我想做的事情就是这样:

{{ page.title | size }}

5 个答案:

答案 0 :(得分:20)

我一直在研究使用液体语法在我的页脚中做链接,这很简单。

{% assign thesize = variable.size %}
{% if thesize > 5 %}
    Do stuff here.
{% endif %}

适合我至少做的事情,只是想我会把它扔出去。我有使用捕获的问题,因为它自动存储为字符串。

然后,

{% if variable.size > 5 %}
      Do stuff here.
{% endif %}

也应该同样有效。

答案 1 :(得分:10)

我将发布我在某人博客上找到的解决方案。到目前为止,这是我发现的唯一方法是如此安全地获取传入字符串的长度并使用除直接相等之外的任何其他方式进行比较。为了进行比较,你必须进行减法并使用差异。该方法在此blog post written by Ben Dunlap中列出。它仍然是一种解决方法,但它很聪明,似乎总是有效。如果你想做一个if,elsif,其他有多个子句,可能效率不高,但你仍然可以采取多种差异并使其有效。基本上你会在我的情况下这样做:

{% capture difference %}{{ page.title | size | minus:20 }}{% endcapture %}

{% unless difference contains '-' %}        // 20 characters or less
  <h3>{{ page.title }}</h3>                 // show smaller header
{% else %}                                  // More than 20 characters
  <h2>{{ page.title }}</h2>                 // show larger header
{% endunless %}

有点聪明,但也有点黑客。如果有人想出更好的方式让我知道。

答案 2 :(得分:6)

您想首先捕获变量中的值:

{% capture title_size %}{{ page.title | size }}{% endcapture %}

{% if title_size > 5 %}
  // do your stuff here...
{% endif %}

capture详见本页最底部: https://github.com/shopify/liquid/wiki/liquid-for-designers

答案 3 :(得分:3)

作为旁注,长度比较也有效:

{% if site.posts.length > 0 %}
  blablabla...
{% endif %}

答案 4 :(得分:2)

虽然没有明显的方法将字符串转换为Liquid模板中的整数,但您可以通过使用仅输出的{% capture %}标记以相反的方式执行此操作(即将整数转换为字符串)整数变量。这是因为捕获总会返回一个stering。

考虑到这一点,你实际上可以欺骗Jekyll进行整数和字符串之间的比较,至少如果你想进行简单的相等测试。

这并没有解决这个问题的问题,但是对于任何看这里的人都有用,所以无论如何我都会发布它。在此示例中,我们要比较页面标题的长度和数组的大小。不要问为什么:)

{% capture title_size %}{{ page.title | size }}{% endcapture %}

{% if title_size == some_array.size %}
    This will never be reached, because some_array.size is an integer and title_size a string
{% endif %}

{% capture some_array_size_str %}{{ some_array.size }}{% endcapture %}

{% if title_size == some_array_size_str %}
    But this will!
{% endif %}