9

page.titleブログを作成するために GitHub ページで Jekyll を使用しており、各投稿の YAML フロントマターで Liquid テンプレートに渡される文字列の長さを取得したいと考えています。これを行う簡単な方法を見つけることができませんでした。Liquid For Designers Guideを見ると、2 種類のマークアップがサポートされていることがわかりました。

  • 出力マークアップ- 二重中括弧{{ }}で区切られた、テンプレートに渡される変数をpage.title、Jekyll などの YAML フロント マター、または のグローバル サイト レベル変数のいずれかに出力できます_config.yml。投稿またはページのタイトルを出力するには、 を使用します{{ page.title }}

  • タグ マークアップ- 中括弧とパーセントで区切られ{% %}、これらはテンプレートのロジックに使用されます。if ステートメント、ループ、そのタイプのもの。

出力マークアップで使用できるフィルタは多数あるようで、 を使用してテンプレートに渡された文字列の長さを出力できます{{ page.title | size }}

ただし、テンプレートでやりたいことは、タイトルの長さに応じて、、、またはヘッダー<h1><h2>使用してページのタイトルをレンダリングすることです。<h3>

とにかく、タグ マークアップと出力マークアップを混在させる方法がわかりません。

を使用して のサイズをpage.titleページに出力できます{{ page.title | size }}が、if ステートメントで長さを使用する方法がわかりません。これも数値ではなく文字列表現を返します。

Liquidの経験が豊富な人は、これを行う方法を知っていますか?

理想的には、私がやりたいことは、次のようなものです。

{% if page.title | size > 5 %} 
4

5 に答える 5

10

誰かのブログで見つけたこの解決策を投稿します。これは、渡された文字列の長さを安全に取得し、単純な等号以外のものを使用して比較する唯一の方法です。比較を行うには、減算を行い、差を使用する必要があります。この方法は、Ben Dunlap によって書かれたこのブログ投稿で概説されています。これはまだ一種の回避策ですが、巧妙で、常に機能するようです。複数の句で if、elsif、else を実行したい場合は効率的ではないかもしれませんが、それでも複数の違いを取り、それを機能させることができます。基本的に、私の場合はこれを行います:

{% capture difference %}{{ page.title | size | minus:20 }}{% endcapture %}

{% unless difference contains '-' %}        // 20 characters or less
  <h3>{{ page.title }}</h3>                 // show smaller header
{% else %}                                  // More than 20 characters
  <h2>{{ page.title }}</h2>                 // show larger header
{% endunless %}

賢いだけでなく、一種のハックでもあります。誰かがより良い方法を思いついたら、私に知らせてください。

于 2013-05-27T01:36:35.653 に答える
7

最初に変数の値をキャプチャします。

{% capture title_size %}{{ page.title | size }}{% endcapture %}

{% if title_size > 5 %}
  // do your stuff here...
{% endif %}

captureこのページの一番下に詳細があります: https://github.com/shopify/liquid/wiki/liquid-for-designers

于 2013-05-26T20:37:45.570 に答える
6

補足として、長さの比較も機能します。

{% if site.posts.length > 0 %}
  blablabla...
{% endif %}
于 2014-10-26T20:44:19.970 に答える
3

Liquid テンプレートで文字列を整数にキャストする明確な方法はありませんが{% capture %}、整数変数を出力するだけのタグを使用して、逆の方法 (つまり、整数を文字列にキャスト) を行うことができます。これは、キャプチャが常に stering を返すためです。

これを念頭に置いて、少なくとも単純な等価性テストを実行したい場合は、実際に Jekyll をだまして整数と文字列を比較させることができます。

これはこの質問の問題を解決しませんが、ここを見ている人にとっては十分に役立つので、とにかく投稿します. この例では、ページ タイトルの長さと配列のサイズを比較します。理由は聞かないでください :)

{% capture title_size %}{{ page.title | size }}{% endcapture %}

{% if title_size == some_array.size %}
    This will never be reached, because some_array.size is an integer and title_size a string
{% endif %}

{% capture some_array_size_str %}{{ some_array.size }}{% endcapture %}

{% if title_size == some_array_size_str %}
    But this will!
{% endif %}
于 2014-01-19T17:05:21.027 に答える