jos*_*y10 2 ruby ruby-on-rails jekyll
我一直在使用Jekyll一两个月,我也是Ruby的新手,所以每天都在学习.
在我的网站中我想添加博客文章的阅读时间,我发现这个红宝石的宝石会让我这样做
https://github.com/garethrees/readingtime
我以正常方式将其安装到我的网站根目录并添加所需的代码,没有任何反应.这不是一个震惊因为我在我的网站根目录中没有实际链接吗?
所以我的网站看起来像这个html明智
---
layout: default
---
<div class="twelve columns">
<h3>{{ page.title }}</h3>
<span class="date">Wrote by Josh Hornby</span>
<span class="date">Estimated reading time – <%= @article.body.reading_time %> </span>
<br /> <br />
<%= @article.body %>
{{ content }}
</article>
<a href="https://twitter.com/intent/tweet?text=Check out this blog by @joshua_hornby - www.joshhornby.co.uk"> <div class="twitter_button"> <img src="/images/twitter.png" alt="twitter-logo" width="50" height="50" /> </div> </a>
</div>
<div class="four columns">
<h3>Recent Posts</h3>
<p>Find out what else I've been talking about:</p>
{% for post in site.related_posts limit: 10 %}
<ul class="square">
<li><a class="title" style="text-decoration:none;" href="{{post.url}}"><strong>{{ post.title }}</strong></a>
{% endfor %}
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
现在我并不感到震惊,它不起作用,但我的问题是如何安装宝石所以我可以在我的Jekyll文件中访问它?我是否需要创建一个_plugin目录并从那里调用它?或者它不会工作,因为它不是一个jekyll插件?在这种情况下,我可能有一个小项目编写我自己的Ruby Jekyll插件.
正如你所推测的,你不能在你的html中调用任意ruby命令<%.相反,您想要编写一个定义Liquid过滤器的插件.在上面的html中,您将使用液体标签来获取页面的内容.在我们潜入之前,您可能想要了解液体换设计师和液体换程序员以及Jekyll关于编写液体扩展的说明,但我会尝试解释.
首先,我们需要使用Jekyll过滤器来获取页面内容,我们将其传递给我们的插件进行分析.上面你有一个@article.body可能意味着在轨道网站上的红宝石,但对Jekyll没有任何意义.正如您在布局文件的中心看到的那样,只需调用页面的内容即可content.它通过液体输出拉入,由表示{{ }}.
代替线
<span class="date">Estimated reading time – <%= @article.body.reading_time %> </span>
Run Code Online (Sandbox Code Playgroud)
我们想要一条抓取内容的行并将其传递给我们的插件:
<span class="date">Estimated reading time – {{ content | readingtime }} </span>
Run Code Online (Sandbox Code Playgroud)
垂直条是一个过滤器,意味着管道content到函数readingtime并包含输出.现在我们需要编写插件本身.在_plugins目录中,我们按照Liquid过滤器的标准模板创建一个ruby脚本:
require 'readingtime'
module TextFilter
def readingtime(input)
input.reading_time
end
end
Liquid::Template.register_filter(TextFilter)
Run Code Online (Sandbox Code Playgroud)
和上面保存,就像这样readingtime.rb在_plugins.它有点自我解释,但你看到这告诉ruby加载gem,并定义一个过滤器,它接受它的输入并将reading_time函数应用于该字符串.
一点注意事项:content将拉入HTML版本的内容,而不是纯文本字符串.我不知道阅读时间宝石是否需要纯文本字符串,但您当然可以使用一些额外的红宝石代码在它们之间进行转换.如果有必要,这可以留给读者练习(虽然这可能会有所帮助).
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |