初めての Middleman シリーズ初めてのMiddleman:レイアウト機能でレイアウトとコンテンツを分離する
前回のrbenv, bundler 環境でMiddlemanを使ったHello Worldで環境構築とbuild/serverコマンドを使ってブラウザにHello Worldと表示するところまで試しました。
今回はレイアウト機能を使ってレイアウトとコンテンツを分離してみます。詳しくは公式ドキュメントのレイアウトを参照してください。
レイアウトを作る
レイアウトファイルはsource/layouts/
ディレクトリの中に置きます。 特に指定をしなければすべてのHTMLにlayout.erb
のレイアウトが適用されます。まずはこのlayout.erb
を作ってみます。前回作ったindex.html.erb
の中身をコピーして<body>
タグの中身を下記のように書き換えます。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>test</title>
<link rel="stylesheet" href="">
</head>
<body>
<!-- このyieldがコンテンツと置き換わります -->
<%= yield %>
</body>
</html>
次にindex.html.erb
のHTMLを消して<body>
タグの中に表示したい内容に書き換えます。
<p>Hello World</p>
これで$ middleman server
を実行してみると前回と表示は変わりませんがレイアウトとコンテンツを分離できるようになります。
コンテンツ側からタイトルタグの中身を指定する
今のレイアウトファイルではタイトルにtest
と表示されるだけです。そこでコンテンツ側にYaml FrontMatterを使ってタイトルを指定できるようにし、レイアウト側でそのタイトルを呼び出します。Yaml FrontMatterの詳しい解説は公式ドキュメントのFrontmatterをどうぞ。
index.html.erb
Yaml FrontMatterは---
で囲んだYamlを記述します。FrontMatterで指定したデータはレイアウトやそのページ自身からもオブジェクトとして呼び出すことができます。このYamlはtitle以外にも自由に設定でき、配列を持たせることもできます。
---
title: Hello World
---
<p>Hello World</p>
layout.erb
コンテンツ側で指定したYaml FrontMatterを呼び出すにはcurrent_page.data.
オブジェクトを指定します。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title><%= current_page.data.title || "The Middleman" %></title>
<link rel="stylesheet" href="">
</head>
<body>
<%= yield %>
</body>
</html>
このレイアウト機能はJekyllを使ったことのある人であればJekyllのレイアウト指定とほぼ同じだと感じると思います。違う点としてはconfig.rb
にパスを基準とした指定ができることと入れ子レイアウト次のYaml FrontMatter指定ができないことですね。Middlemanで入れ子レイアウトを指定する際はconfig.rb
かレイアウトファイルに<% wrap_layout :layout do %>ごにょごにょ<% end %>
と指定します。
次回はパーシャル(読み込み専用ファイル)を試して見たいと思います。
初めてのMiddleman:パーシャルを使ったコンテンツのモジュール化
シリーズ
- 初めてのMiddleman:rbenv, bundler 環境でMiddlemanを使ったHello World
- 初めてのMiddleman:レイアウト機能でレイアウトとコンテンツを分離する
- 初めてのMiddleman:パーシャルを使ったコンテンツのモジュール化
- 初めてのMiddleman:SCSSのコンパイルとテンプレートの基礎
- 初めてのMiddleman:Sass MixinライブラリのBourbon, Neatを導入してみる
- 初めてのMiddleman:データファイルとデータファイルを使った動的ページ生成
- 初めてのMiddleman:サイトにブログ機能を追加する
- 初めてのMiddleman:Amazon S3にビルドされたファイルを同期する
- 初めてのMiddleman:HTML/CSS/JS/画像をビルド時に圧縮する
- 初めてのMiddleman:設定について
- 初めてのMiddleman:静的サイトのキャッシュとasset_hash拡張を使ったキャッシュのパージ
- 初めてのMiddleman:Middleman::S3Syncで使うAWS IAMユーザーのアクセスキー管理方法について
- 初めてのMiddleman:Helperを使ってGravatarのアイコンを表示する
- 初めてのMiddleman:アセットパイプラインを使った外部アセットファイルの読み込みと結合
- 初めてのMiddleman:Bowerを使ってjQueryなどのライブラリをロードする
- 初めてのMiddleman:スケルトンを自作する方法
- 初めてのMiddleman:Middleman Blogの記事データを使いやすく管理する方法
- 初めてのMiddleman:Middleman-blogのシングルブログを前提としたSkeletonを作った
- 初めてのMiddleman:Middleman-blogでマルチブログを試してSkeletonを作った
- 初めてのMiddleman:Markdown EngineをkramdownからRedcarpetに切り替える
- 初めてのMiddleman:RedcarpetとMiddleman::Rougeを使ったシンタックスハイライト
- 初めてのMiddleman:Middleman-Syntaxを使ったシンタックスハイライト
- 初めてのMiddleman:Middleman-Blogで記事毎に画像を管理する方法
- 初めてのMiddleman:Gulpを使ってサムネイル画像を生成する
- 初めてのMiddleman:Middleman-OGPのOGP画像指定を相対パスで設定する
- 初めてのMiddleman:Middleman-OGPでMiddleman-BLogにOGPを設定する
- 初めてのMiddleman:Middleman-Titleでタイトルタグを手軽に設定する
- 初めてのMiddleman:多言語化 - 言語ファイルの作成とヘルパーの埋め込み
- 初めてのMiddleman:Middleman-blogにカテゴリやシリーズなどのカスタムコレクションを追加する方法
- 初めてのMiddleman:Bowerで管理されているフォントファイルをインポートする