2012-12-06 36 views
1

我一直在使用傑基爾了一兩個月,現在,我也是新來的Ruby所以每天的學習。使用插件在傑基爾

在我的地盤我要添加博客文章的閱讀時間,我發現這個紅寶石的寶石,這將讓我做

https://github.com/garethrees/readingtime

我安裝它以正常的方式進入我的網站的根並添加所需的代碼,但沒有任何反應。這並不令人震驚,因爲我的網站根目錄中沒有實際的鏈接。

所以我的網站看起來像這個網站明智

--- 
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> 

現在,我不感到震驚,它不工作,但我的問題是如何將安裝寶石,所以我可以在我的化身文件訪問呢?我需要創建一個_plugin目錄並從那裏打電話嗎?或者它不會工作,因爲它不是一個jekyll插件?在這種情況下,我可能會有一個項目編寫我自己的Ruby Jekyll插件。

回答

4

正如你已經猜到,你不能使用<%調用在HTML任意紅寶石命令。相反,你想寫一個定義了液體過濾器的插件。在上面的html中,您將使用液體標籤來抓取頁面的內容。你可能想刷上liquid-for-designersliquid-for-programmers,以及我們在潛水前Jekyll notes on writing liquid extensions,但我會試着解釋。

首先,我們需要使用傑基爾過濾器抓取的頁面,我們將通過我們的分析插件的內容。你上面有一個@article.body這可能意味着東西在軌道站點紅寶石,但並不意味着什麼化身。正如您在佈局文件的中心所看到的那樣,該頁面的內容簡稱爲content。它通過液體輸出被拉入,由{{}}指示。

代替線

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

我們希望,抓住內容,並把它傳遞給我們的插件線:

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

豎線是一個過濾器,這意味着管content到功能readingtime幷包括輸出。現在我們需要編寫插件本身。在_plugins目錄中,我們創建以下的液體過濾器的標準模板的Ruby腳本:

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

和上面保存爲像在_pluginsreadingtime.rb。這有點不言自明,但你會發現這會告訴ruby加載gem,並定義一個過濾器來接受它的輸入並將reading_time函數應用於該字符串。

小記:content將拉入HTML版本的內容,而不是純文本字符串。我不知道閱讀時間寶石是否需要一個純文本字符串,但你當然可以使用一些額外的ruby代碼在它們之間進行轉換。如果有必要,這留給練習讀者(儘管this可能有幫助)。