Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Github 如何比较字符串';s尺寸/长度(单位:Jekyll');什么是液体模板?_Github_Template Engine_Jekyll_Liquid - Fatal编程技术网

Github 如何比较字符串';s尺寸/长度(单位:Jekyll');什么是液体模板?

Github 如何比较字符串';s尺寸/长度(单位:Jekyll');什么是液体模板?,github,template-engine,jekyll,liquid,Github,Template Engine,Jekyll,Liquid,我在GitHub页面上使用Jekyll来构建博客,我希望获得页面的长度。标题字符串传递到YAML首页的Liquid模板,并在每篇文章中显示。我还没有想出一个简单的方法来做到这一点。通过查看,我可以看到它支持两种类型的标记: 输出标记-由双大括号分隔{{},您可以输出传递到模板的变量,可以在YAML首页(如Jekyll中的页面.title)中输出,也可以在\u config.yml中输出全局站点级变量。为了输出文章或页面的标题,您可以使用{{page.title}} 标记标记-由大括号和百分比分

我在GitHub页面上使用Jekyll来构建博客,我希望获得
页面的长度。标题
字符串传递到YAML首页的Liquid模板,并在每篇文章中显示。我还没有想出一个简单的方法来做到这一点。通过查看,我可以看到它支持两种类型的标记:

  • 输出标记-由双大括号分隔
    {{}
    ,您可以输出传递到模板的变量,可以在YAML首页(如Jekyll中的
    页面.title
    )中输出,也可以在
    \u config.yml
    中输出全局站点级变量。为了输出文章或页面的标题,您可以使用
    {{page.title}}

  • 标记标记-由大括号和百分比分隔
    {%}
    ,它们用于模板中的逻辑。如果语句,循环,诸如此类的东西

显然,有很多过滤器可以用于输出标记,并且可以使用
{{page.title | size}}
输出传递给模板的字符串长度

但是,我希望在模板中使用
标题呈现页面标题,具体取决于标题的长度

无论如何,我无法找到混合标记标记和输出标记的方法

我可以将
page.title
的大小输出到带有
{{page.title | size}}
的页面上,但是,我不知道如何在if语句中使用长度。这还会返回字符串表示形式,而不是数字

对液体有更多经验的人知道怎么做吗

理想情况下,我想做的事情大致如下:

{% if page.title | size > 5 %} 

您希望首先捕获变量中的值:

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

{% if title_size > 5 %}
  // do your stuff here...
{% endif %}
capture
在本页底部有详细说明:

我将在某人的博客上发布我找到的解决方案。这是迄今为止我发现的唯一一种安全获取传入字符串的长度并使用除直接相等以外的任何方法进行比较的方法。为了进行比较,你必须做减法运算并使用差分。本文概述了该方法。这仍然是一种变通方法,但它很聪明,而且似乎总是有效的。如果您想使用多个子句执行if、elsif和else,可能效率不高,但您仍然可以接受多个差异并使其工作。在我的情况下,基本上你会这样做:

{% 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 %}
{%capture-difference%}{{page.title | size |减:20}{%endcapture%}
{%除非差异包含'-'%}//20个字符或更少
{{page.title}}//显示较小的标题
{%else%}//超过20个字符
{{page.title}}//显示较大的标题
{%end除非%}

有点聪明,但也有点像黑客。如果有人想出更好的方法,请告诉我。

虽然在液体模板中没有明显的方法可以将字符串转换为整数,但您可以通过使用仅输出整数变量的
{%capture%}
标记以另一种方式(即,将整数转换为字符串)来完成。这是因为捕获将始终返回一个灭菌

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

这并不能解决这个问题,但对任何人来说都很有用,所以我还是会发布它。在本例中,我们希望将页面标题的长度与数组的大小进行比较。不要问为什么:)


作为旁注,长度比较也适用于:

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

我一直在研究如何使用流畅的语法在我的页脚中创建链接,这非常简单

{% assign thesize = variable.size %}
{% if thesize > 5 %}
    Do stuff here.
{% endif %}
至少对我正在做的事情有用,我只是想把它扔出去。我在使用capture时遇到了问题,因为它是自动存储为字符串的

然后呢,

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

也应该同样有效。

我承认我忽略了
capture
标签。这看起来正是我想要的。但是,这仍然不起作用,因为
size
过滤器返回一个字符串,它抛出并出错,与一个数字进行比较时不会生成。@CoryGross
size
不返回字符串,但
capture
使其成为字符串…;-)这是一个非常丑陋的解决方案,但它的工作原理与预期一致,因此这是一个很好的答案。
{% if variable.size > 5 %}
      Do stuff here.
{% endif %}