Jekyll中Liquid模板的算术计算,计算预计阅读时间

Arithmetic calculation on Liquid template in Jekyll to calculate estimated reading time

我 1 周前开始使用 Jekyll,对 Ruby 一无所知,我想实现以下功能。

来自 Jekyll documentation 我可以使用下面的模板来计算一篇文章中的单词:

{{ page.content | number_of_words }}

我想根据平均 200 words per minute 的假设,使用此信息计算这篇文章的估计阅读时间(以分钟为单位)。其中给出了以下简单公式:

number_of_words / 200

不确定,但根据我所读到的 Ruby,我应该使用 {% %} 来执行我的计算,但我不确定我是否可以使用 {{ page.content | number_of_words }} 在其中执行除法。

这是我目前拥有的:

.html 文件:

.
.
<p class="meta">
    {% print {{number_of_words}} / 200 %}
</p>
.
.

我确定上面使用的 number_of_words 不存在,我不确定 print 是否可以解决问题。有什么想法吗?

虽然 Jekyll 是用 Ruby 编写的,但在使用它时通常不需要编写任何 Ruby。它使用 Liquid,它被明确设计为允许用户创建页面设计而不允许他们 运行 任意代码。

Liquid 确实有 tags (Jekyll adds some more),它使用 {% %},但在这种情况下,我认为您可能会对 Erb 模板语言感到困惑,它使用 <% %> 来执行 Ruby代码。

如果需要,您可以创建自己的自定义 Liquid 标签和过滤器,但在这种情况下,divided_by 过滤器似乎可以满足您的需求:

{{ page.content | number_of_words | divided_by: 200 }}

注意这是整数除法,与您的示例产生的结果相同,因此如果字数少于 200,则结果将为零。要检查这一点并仅在总数 > 0 时包括它,您可以使用 assign 标签(可与过滤器一起使用)和 if 标签,如下所示:

{% assign read_time = page.content | number_of_words | divided_by: 200 %}

{% if read_time > 0 %}
Read time: {{ read_time }}
{% endif %}