【问题标题】:Using plugins in Jekyll在 Jekyll 中使用插件
【发布时间】:2012-12-06 00:15:04
【问题描述】:

我已经使用 Jekyll 一两个月了,我也是 Ruby 新手,所以每天都在学习。

在我的网站中我想添加博客文章的阅读时间,我发现了这个 ruby​​ gem 可以让我这样做

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>

现在我对它不起作用并不感到震惊,但我的问题是如何安装 gem 以便我可以在我的 Jekyll 文件中访问它?我是否需要创建一个_plugin 目录并从那里调用它?或者它不会因为它不是一个 jekyll 插件而工作?在那种情况下,我可能有一个小项目来编写我自己的 Ruby Jekyll 插件。

【问题讨论】:

    标签: ruby-on-rails ruby jekyll


    【解决方案1】:

    正如您所推测的,您不能使用&lt;% 在您的html 中调用任意的ruby 命令。相反,您想编写一个定义 Liquid 过滤器的插件。在上面的 html 中,您将使用液体标签来获取页面的内容。在我们深入研究之前,您可能想复习liquid-for-designersliquid-for-programmers 以及Jekyll notes on writing liquid extensions,但我会尝试解释一下。

    首先,我们需要使用 Jekyll 过滤器来抓取页面内容,然后将其传递给我们的插件进行分析。在上面你有一个@article.body,它可能对 ruby​​ on rails 网站意味着什么,但对 Jekyll 没有任何意义。正如您在布局文件的中心看到的,页面的内容被简单地称为content。它通过液体输出被拉入,由{{}} 指示。

    代替线

    <span class="date">Estimated reading time – <%= @article.body.reading_time %> </span>
    

    我们想要一行来抓取内容并将其传递给我们的插件:

    <span class="date">Estimated reading time – {{ content | readingtime }} </span>
    

    竖线是一个过滤器,表示将content 传递到函数readingtime 并包含输出。现在我们需要编写插件本身。在 _plugins 目录中,我们按照 Liquid 过滤器的标准模板创建一个 ruby​​ 脚本:

    require 'readingtime'
    module TextFilter
      def readingtime(input)
        input.reading_time
      end
    end
    Liquid::Template.register_filter(TextFilter)
    

    并将上述内容另存为 _plugins 中的 readingtime.rb。这有点不言自明,但是您会看到这告诉 ruby​​ 加载 gem,并定义一个过滤器,该过滤器接受其输入并将 reading_time 函数应用于该字符串。

    一点注意:content 将拉入 HTML 版本的内容,而不是纯文本字符串。我不知道阅读时间 gem 是否需要纯文本字符串,但您当然可以使用一些额外的 ruby​​ 代码在它们之间进行转换。如有必要,这留给读者作为练习(尽管this 可能会有所帮助)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多