単純な個人のJekyllブログの場合、lang(言語)site.posts
の属性で自分をグループ化します。post
これは、「en」、「nl」、またはnilのいずれかです。
次に、投稿の2つのリストをレンダリングします。現在私は持っています:
<section lang="nl">
<h2>Nederlandse Artikelen</h2>
<ul class="posts">
{% for post in site.posts limit:50 %}
{% if post.lang == "nl" %}
{% include li_for_post_with_date.yml %}
{% endif %}
{% endfor %}
</ul>
<a href="archief.html">Archief »</a>
</section>
<section lang="en">
<h2>English Articles</h2>
<ul class="posts">
{% for post in site.posts limit:50 %}
{% if post.lang == nil or post.lang == "en" %}
<li><span>{{ post.date | date_to_string }}</span> » <a href="{{ BASE_PATH }}{{ post.url }}">{{ post.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
これには2つの問題があります。
- 最も迷惑な; 最後の50件の投稿に47個のlang=enと3個のlang=nlがあると、歪んだリストが表示されます。25 lang=enと25lang=nlのエントリが必要です。
- ループは2回ウォークオーバーされますが、これは不十分だと思います。
Liquidでコレクションを割り当てたり準備したりする方法はありますか?そうすれば、一度ループしsite.posts
て、のようなネストされたコレクションを準備できますsite.grouped_posts[en]
。
または別のトリック?
解決
トムクラークソンが指摘するように、カウンターを維持することは正しい方向です。ただし、カウンターのインクリメントは最近のLiquidバージョンでのみ行われ、Github(私の液体がコンパイルされている場所)で実行されているものには2.2.2があり、カウンターをインクリメントすることはできません。Liquidは変数counter
を文字列に変換するため、Tomsソリューション自体も機能しません。これは、と比較することはできません<
。
文字列を追加して文字数を数えることで、ハックを作成しました。
{% assign counter = '.' %}
{% for post in site.posts %}
{% if counter.size <= 25 and post.lang == "nl" %}
{% capture counter %}{{ counter | append:'.' }}{% endcapture %}
{% include li_for_post_with_date.yml %}
{% endif %}
{% endfor %}
言ったように、醜いので、よりクリーンな解決策がある場合は、解決策を追加してください!