Includes(インクルード)
include
タグは、_includes
フォルダの他のファイルを入れ込む事を可能にします。
{% include footer.html %}
Jekyllはソースディレクトリのrootにある_includes
ディレクトリのファイル(この場合はfooter.html
)を探し、コンテンツに挿入します。
相対的な他のファイルをインクルードする
include_relative
タグを使用することで、現在のファイルから相対的な位置のファイルを挿入することもできます。
{% include_relative somedir/footer.html %}
_includes
ディレクトリに挿入するコンテンツを置いておく必要はありません。タグを使用するファイルから、挿入したいファイルを相対パスで指定します。例えば、_posts/2014-09-03-my-file.markdown
でinclude_relative
を使用すると、_posts
ディレクトリのファイルやそのサブディレクトリのファイルを挿入できます。
../
は使用できませんので、上位のディレクトリのファイルは挿入できないことに注意してください。
include
タグの変数など全ての機能は、include_relative
でも使用できます。
インクルードファイルを変数で指定する
埋め込むファイルの名前は、実際のファイル名の代わりに変数として指定できます。例えば、ページのfront matterに次のように変数を定義したとします。
---
title: My page
my_variable: footer_company_a.html
---
そうすれば、その変数をincludeで参照できます。
{% if page.my_variable %}
{% include {{ page.my_variable }} %}
{% endif %}
この例では、_includes
ディレクトリのfooter_company_a.html
ファイルが挿入されます。
インクルードにパラメータを渡す
インクルードにパラメータを渡すこともできます。例えば、_includes
フォルダのnote.html
ファイルに次の記載があるとします。
<div markdown="span" class="alert alert-info" role="alert">
<i class="fa fa-info-circle"></i> <b>Note:</b>
{{ include.content }}
</div>
{{ include.content }}
はincludeでそのパラメータの値を指定した時に入力される変数です。指定は次のように行います。
{% include note.html content="This is my sample note." %}
content
の値(今回はThis is my sample note
)が{{ include.content }}
に挿入されます。
インクルードにパラメータを渡すのは、Markdownコンテンツから複雑な部分を隠したいときに役立ちます。
例えば、画像を特別なフォーマットで使用しようと思っていて、著者にこの複雑なフォーマットを覚えさせたくない場合です。一つの方法として、includeとパラメータを使用して、シンプルにします。以下にincludeを使用したいと思うようなフォーマットの例を示します。
<figure>
<a href="http://jekyllrb.com">
<img src="logo.png" style="max-width: 200px;"
alt="Jekyll logo" />
</a>
<figcaption>This is the Jekyll logo</figcaption>
</figure>
これを、インクルードとパラメータを使用して、次のようにテンプレート化することができます。
<figure>
<a href="{{ include.url }}">
<img src="{{ include.file }}" style="max-width: {{ include.max-width }};"
alt="{{ include.alt }}"/>
</a>
<figcaption>{{ include.caption }}</figcaption>
</figure>
このインクルードの内容には5つのパラメータがあります。
url
max-width
file
alt
caption
このinclude(ファイル名はimage.html
とします)に全てのパラメータを渡す例です。
{% include image.html url="http://jekyllrb.com"
max-width="200px" file="logo.png" alt="Jekyll logo"
caption="This is the Jekyll logo." %}
これで、出力されるHTMLは最初に示したものになります。
ユーザーがパラメータを指定しない状況への対策として、Liquid’s default filterを使用できます。
全体として、オーディオクリップやビデオクリップの挿入、アラート、特別なフォーマットなど、さまざまな用途のテンプレートとして機能するインクルードを作成できます。あまりにも多くのインクルードを使うことは避けるようにしてください。サイトの構築時間が遅くなります。例えば、画像を挿入する度にインクルードを使うのは避けるべきです。(上記のテクニックは特別な画像のための例です。)
インクルードにパラメータ変数を渡す
インクルードに渡したいパラメータが、文字列ではなく変数である場合もあるでしょう。例えば実際の製品の名前ではなく、{{ site.product_name }}
を使用して製品の全てのインスタンスを参照している場合です。(この場合、_config.yml
ファイルでproduct_name
キーに製品名が設定されています)
インクルードに渡すパラメータの値に中括弧は使用できません。例えば、"The latest version of {{ site.product_name }} is now available."
の値のパラメータは渡せません。
インクルードに渡す値に変数を含める場合は、その前に全体を変数として格納する必要があります。capture
タグを使用して変数を作成します。
{% capture download_note %}
The latest version of {{ site.product_name }} is now available.
{% endcapture %}
captureした変数をインクルードのパラメータとして渡します。文字列ではなくなったので、変数名を引用符で囲まないでください。
{% include note.html content=download_note %}