jekyllのliquid templateで配列を扱う

GitHub Pagesは内部でjekyllを利用しmarkdownからhtmlファイルを生成している。 jekyllではrubyのliquid templateが利用できる。 liquid templateで配列を扱う方法がやや特殊なので、めも。

配列の代入

空の配列の代入は以下のように行う。

{% assign array1 = "" | split: "|" %}

array1 = []のように配列を直接代入する方法は今のところないらしい。 よって、空の文字列をsplit filterで分割し長さ0の配列を作っている。 "|"の部分はなんでも良い。

配列への挿入

{% assign array1 = "" | split: "|" %}
{% assign array1 = array1 | push: "Hoge" %}

文字列でなくobject(例えばpage)もPushできる。 同様にpopも使える。

データの篩い分け

空の配列が作れたら、各pageの情報を用いてpageの分類ができる。 各pageのYAML front matterが以下のようになっているとする。

---
title: title1
categories: [hoge]
---

categoriesにhogeを含むpageのみを抽出したい場合は、次のようにする。

<!-- 空の配列を作成 -->
{% assign hoge_pages = "" | split: "|" %}

<!-- categoriesにhogeを含むものを抽出 -->
{% for site_page in site.pages %}
  {% if site_page.categories contains "hoge" %}
    {% assign hoge_pages = hoge_pages | push: site_page %}
  {% endif %}
{% endfor %}

{% for hoge_page in hoge_pages %}
  <!-- 各hoge_pageに何かをする。 -->
{% endfor %}