2

私はJekyllを1、2か月使用していますが、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>

今、私はそれが機能していないことにショックを受けていませんが、私の質問は、Jekyllファイルでそれにアクセスできるようにgemをインストールする方法ですか?_pluginディレクトリを作成してそこから呼び出す必要がありますか?それとも、jekyllプラグインではないので機能しませんか?その場合、私は自分のRubyJekyllプラグインを作成する小さなプロジェクトを持っているかもしれません。

4

1 に答える 1

5

ご想像のとおり、を使用してhtml内の任意のrubyコマンドを呼び出すことはできません<%。代わりに、Liquidフィルターを定義するプラグインを作成します。上記のHTMLでは、液体タグを使用してページのコンテンツを取得します。デザイナー向けのリキッドとプログラマー向けのリキッド、およびリキッドエクステンションの作成に関するJekyllのメモをブラッシュアップしてから、詳しく説明します。

まず、Jekyllフィルターを使用してページのコンテンツを取得する必要があります。これをプラグインに渡して、分析します。上にあるのは、@article.bodyおそらくRailsサイトのRubyにとっては何かを意味しますが、Jekyllにとっては何の意味もありません。レイアウトファイルの中央に表示されているように、ページのコンテンツは単にと呼ばれcontentます。で示されるLiquid出力を介して引き込まれます{{ }}

ラインの代わりに

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

コンテンツを取得してプラグインに渡す行が必要です。

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

content垂直バーはフィルターであり、関数へのパイプを意味しreadingtime、出力を含みます。次に、プラグイン自体を作成する必要があります。ディレクトリに、_pluginsLiquidフィルターの標準テンプレートに従ってrubyスクリプトを作成します。

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

そして、上記をのように保存readingtime.rb_pluginsます。ちょっと自明ですが、これはrubyにgemをロードし、その入力を受け取り、そのreading_time文字列に関数を適用するフィルターを定義するように指示していることがわかります。

ちょっとした注意:contentプレーンテキストの文字列ではなく、HTMLバージョンのコンテンツを取り込みます。readingtime gemにプレーンテキストの文字列が必要かどうかはわかりませんが、もちろん、少し余分なルビーコードを使用してそれらの間で変換できます。必要に応じて、それは読者の練習問題として残されています(これは役立つかもしれませんが)。

于 2012-12-13T02:01:17.307 に答える