レイアウト
レイアウトはコンテンツを包み込むテンプレートです。テンプレートでソースコードを一カ所にまとめることができますので、フッターやナビゲーションをページ毎に繰り返す必要がありません。
レイアウトは_layouts
ディレクトリに入れます。慣例として、default.html
という基本テンプレートを用意し、必要に応じて他のレイアウトがこれを継承するようにします。
レイアウトディレクトリ
Jekyllはサイトのsource
のrootかテーマのrootのどちらかで_layouts
ディレクトリを探します。
設定ファイルのlayouts_dir
キーでレイアウトを入れるディレクトリの名前を変更できますが、そのディレクトリはサイトのsource
のrootにある必要があります。
使い方
まず始めに、default.html
にテンプレートのソースコードを書きます。content
は特別な変数で、ポストやページのコンテンツをレンダリングして、入れ込みます。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<nav>
<a href="/">Home</a>
<a href="/blog/">Blog</a>
</nav>
<h1>{{ page.title }}</h1>
<section>
{{ content }}
</section>
<footer>
© to me
</footer>
</body>
</html>
元のファイルの全front matterにアクセスできます。上記の例では、page.title
がページのfront matterから読み込まれます。
次にページのfront matterで使用するレイアウトを指定する必要があります。front matterのデフォルトを使用して、全ページに設定するのを省くことができます。
---
title: My First Page
layout: default
---
This is the content of my page
このページは次のように出力します。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My First Page</title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<nav>
<a href="/">Home</a>
<a href="/blog/">Blog</a>
</nav>
<h1>My First Page</h1>
<section>
This is the content of my page
</section>
<footer>
© to me
</footer>
</body>
</html>
継承
レイアウトの継承は、サイトの一部のドキュメントには、既存のレイアウトに何かを追加したい場合に便利です。例としては、ブログのポストには日付と著者を表示したいけれど、他ではベースのレイアウトを使用する場合です。
その様な場合は、違うレイアウトを作成して、元にするレイアウトをfront matterで指定します。例えば、次のような_layouts/post.html
を作ります。
---
layout: default
---
<p>{{ page.date }} - Written by {{ page.author }}</p>
{{ content }}
これで、ポストはこのレイアウトを使用して、ページではデフォルトを使用することができます。
変数
レイアウトにもfront matterを設定することができます。Liquidを使用する場合のみ違いがあり、page
変数ではなく、layout
変数を使用します。例えば:
---
city: San Francisco
---
<p>{{ layout.city }}</p>
{{ content }}