在Jekyll中使用插件

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插件.

cbo*_*tig 5

正如你所推测的,你不能在你的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版本的内容,而不是纯文本字符串.我不知道阅读时间宝石是否需要纯文本字符串,但您当然可以使用一些额外的红宝石代码在它们之间进行转换.如果有必要,这可以留给读者练习(虽然可能会有所帮助).