2016-10-28 2 views
0

私はジキルのブログを構築しようとしています。しかし、以前はYAMLを使ったことはありませんでした。私はこの事の論理に怒っています。表示、まず、すべての著者を反復処理するために:JekyllのYAML _dataから反復して取得する方法は?

- authors: 
    - user: andre 
     name: Andre Santos 
     site: http://test.dev 
     email: [email protected] 

    - user: john 
     name: John Doe 
     site: 
     email: [email protected] 

は、今私は2つの非常にシンプルなものをしたい:

は、最初に私は著者のリストとそれぞれのメタ情報と_data/authors.ymlにYAMLファイルを書きましたそれらに関するいくつかの情報:

{% for list in site.data.authors %} 
    {% for author in list %} 
     {{ author.user }} - {{ author.user.name }} 
    {% endfor %} 
{% endfor %} 

しかし、それは何も表示されません!私は、特定のユーザーからの情報を取得するコードのいくつかの他の部分では今

{% assign the_user = site.data.authors.authors[post.username] %} 
{{ the_user.name }} 

そして、再びそれが何を示していません!私は何が間違っているのか分かりません。私は他の多くのソリューションや反復を試みましたが、YAMLファイルの反復方法について頭や尾を作ることはできません。このサイトでは私がJekyll + Liquidにそれらを適応させると私のために働かない。

私は間違っていますか?これらの変数にアクセスするには?

+0

YAMLファイルの最初の行を 'authors:'に変更し、各作者のユーザー名をキーとして使用すると修正されます。それ以外の場合は、配列内にオブジェクトがあり、オブジェクト内のオブジェクトであるかのように作成者にアクセスしています。 –

答えて

0

問題を解決します!

私はいくつかの長い議論の末、YAMLからJSONへの変更、そして配列の代わりにRuby Hashを返すことを理解するという2つのステップに基づいて非常に簡単な解決策を得ました。

ので、最終的なファイル、authors.json

{ 
    "andre": { 
     "name": "Andre Santos", 
     "site": "http://test.dev", 
     "email": "[email protected]" 
    }, 
    "john": { 
     "name": "John Doe", 
     "site": "", 
     "email": "[email protected]" 
    } 
} 

今すぐファイルが修正されていること、のは、その項目のいずれかを選択し、それを示すの世話をしましょう。

{{ site.data.authors[post.author].name }} 

post.author = "andre"場合、テンプレートはAndre Santosを返します。最初の問題、解決!

今、Jekyllはかなりダムですが、JSONではまだうまく動作しません。私たちが何をしていようとも、それは貧弱に繰り返されます。そこで、以下の状況を分析しましょう:

テストでは、繰り返しをダンプすることにしました。そう:

{% for author in site.data.author %} 
    {{ author }} 
    ---- 
{% endfor %} 

それは次のような結果生成:

andre{"name"=>"Andre Santos", "site"=>"test.dev";, "email"=>"[email protected]"} ---- 
john{"name"=>"John Doe", "site"=>nil, "email"=>"[email protected]"} ---- 

この結果は、(=>シンボルに気づく)ジキルは、アレイが、ハッシュを生成されていない示します。だから、それをハッシュとして扱おうとしましょう。{{ author[0]を印刷しようとすると、andrejohnと表示されます。優れた!だから、ハッシュの次の部分(メタデータ)は実際には著者[1]です。

情報を表示するには、最終的なコード:

{% for author in site.data.authors %} 
    Username: {{ author[0] }} 
    Full Name: {{ author[1]["name"] }} 
    {% if author[1]["site"] != "" %} 
     Site: {{ author[1]["site"] }} 
    {% endif %} 
    E-Mail: {{ author[1]["email"] }} 
    ----- 
{% endfor %} 

そして結果:

Username: andre 
Full Name: Andre Santos 
Site: http://test.dev 
E-Mail: [email protected] 
---- 
Username: john 
Full Name: John Doe 
E-Mail: [email protected] 
---- 

のTaダを!

したがって、まとめて:YAMLを落として、JSONを使用して、JSONの特定の部分から情報を取得します。単純なドット表記とキーを使用します。 forを使用する場合は、それをハッシュとして扱います。コードはやや難しくなりますが、少なくとも私が望むように動作しています。将来、JekyllがJSONを少し真剣に受け入れるならば、おそらくもっと簡単にそれを繰り返すことができます。

ありがとうございました!

1

あなたのデータファイルを簡素化することができます。

- user: andre 
    name: Andre Santos 
    site: http://test.dev 
    email: [email protected] 

- user: john 
    name: John Doe 
    site: 
    email: [email protected] 

今、あなたはこのようなあなた件のデータを取得することができます:

<ul> 
{% for author in site.data.authors %} 
    <li>{{ author.user }} - {{ author.name }}</li> 
{% endfor %} 
</ul> 

またはこのように:

{% assign the_user = site.data.authors | where: "user", post.username | first %} 
{{ the_user.name }} 
+0

forは機能しませんでした。それは - のみを出力するので、author.userもauthor.user.nameも表示されません。ジキルはとても不気味です。 – user3430483

関連する問題