メインコンテンツにスキップ
  • Middleman ホームページ
  • サポート
  • コミュニティ
  • ドキュメント

基礎

  • インストール
  • v4 へのアップグレード
  • 新しいサイトの作成
  • ディレクトリ構造
  • 開発サイクル
  • ビルド & デプロイ
  • Frontmatter
  • テンプレート言語
  • ヘルパーメソッド
  • レイアウト
  • パーシャル
  • リダイレクト
  • ブログ機能

高度な機能

  • 設定
  • プロジェクトテンプレート
  • 動的ページ
  • データファイル
  • 多言語化 (i18n)
  • アセットパイプライン
  • 外部パイプライン
  • Rack ミドルウェア
  • サイトマップ
  • きれいな URL (ディレクトリインデックス)
  • キャッシュ機能の改善
  • ファイルサイズ最適化
  • カスタム拡張
  • テンプレートエンジンオプション

レイアウト

レイアウト機能はテンプレート間で共有する, 個別ページを囲むための共通 HTML の 使用を可能にします。PHP 開発経験のある開発者であればページ毎に, その上部と下部に "header" や "footer" への参照をもつ使い方をしたことがあるでしょう。 Ruby の世界と Middleman では逆のアプローチを取ります。 "layout" は "header" や "footer" 両方を含むことで個別ページのコンテンツを 囲みます。

最も基本的なレイアウトは共有コンテンツとそのテンプレートの内容を 配置する yield を含みます。

ERB を使ったレイアウトの例です:

<html>
<head>
  <title>私のサイト</title>
</head>
<body>
  <%= yield %>
</body>
</html>

ERB で書かれたページテンプレートが与えられます:

<h1>Hello World</h1>

組み合わされた最終的な HTML 出力は次のように:

<html>
<head>
  <title>私のサイト</title>
</head>
<body>
  <h1>Hello World</h1>
</body>
</html>

ファイル拡張子とパーサに関しては, レイアウト機能はビルドプロセスの中で テンプレートと異なる機能をもっているので, 正しい拡張子を与えるよう 注意する必要があります。次がその理由です:

セクション毎に異なるテンプレートを集めるような場合, ファイル拡張子は 重要です。例えば, レイアウトファイルを layout.html.erb と名付けることで, 言語パーサにこのファイルは erb として扱えと命じることになり, html に 変換されます。

ある意味で, 拡張子を右から左に解釈することは, ファイルが左端の拡張子形式のファイルとしてパース処理されることを 知らせます。例の場合, ファイルが与えられた時に erb から html に変換し, ファイルをビルドします。

テンプレートとは異なり, レイアウトは html にレンダリングされません。レイアウトの ファイル名の左端の拡張子に .html を与えた場合, ビルド時のエラーの原因になります。 したがって, 例えば layout.erb のような形式で拡張子をつける必要があります。

カスタムレイアウト

デフォルトでは, Middleman はそのサイトのすべてのページに同じレイアウトを適用 します。複数のレイアウトを使い, どのページがどのレイアウトを使うのか指定したい 場合があります。例えば, それぞれ独自のレイアウトをもつ "公開" サイトと "admin" サイトがあるような場合です。

デフォルトのレイアウトは source フォルダの中で "layout" と名付けられ, 使用する テンプレート言語の拡張子を持ちます。デフォルトでは layout.erb です。 あなたが作るレイアウトは source/layouts フォルダに置かれます。

admin 用の新しいレイアウトを作るには, source/layouts フォルダに 新たに "admin.erb" ファイルを追加します。次の内容だったとします:

<html>
<head>
  <title>Admin Area</title>
</head>
<body>
  <%= yield %>
</body>
</html>

次に, どのページがこのレイアウトを使用するのか指定する必要があります。 次の 2 つの方法で指定することができます。ページの大きなグループにこのレイアウト を適用したい場合, config.rb で "page" コマンドを使うことができます。 source フォルダの中に "admin" フォルダがある状態で "admin" の中のテンプレートは admin レイアウトを使うとしましょう。config.rb は次のようになります:

page "/admin/*", :layout => "admin"

ページのパスにワイルドカードを使うことで admin フォルダ以下のすべてのページが admin レイアウトを使うように指定しています。

ページで直接指定することもできます。例えば, source フォルダに login.html.erb が置かれているが, admin レイアウトを適用したい場合です。 ページテンプレートの例として次を使います。

<h1>Login</h1>
<form>
  <input type="email">
  <input type="password">
  <input type="submit">
</form>

この特別なページには次のようにカスタムレイアウトを指定できます:

page "/login.html", :layout => "admin"

これは login ページが admin レイアウトを使うように指定しています。 config.rb ですべて指定する代わりに, Frontmatter を使ってテンプレートの ページ毎にレイアウトを指定することもできます。 login.html.erb ページ自身にレイアウトを指定する例です。

---
layout: admin
---

<h1>Login</h1>
<form>
  <input type="email">
  <input type="password">
  <input type="submit">
</form>

入れ子レイアウト

入れ子レイアウトはレイアウトの積み重ねを作成できます。この機能を理解する 最も簡単なユースケースは middleman-blog 拡張です。ブログ記事はサイト全体の コンテンツの部分集合です。ブログ記事によって追加された内容と構造を含みますが, 最終的にサイト全体の構造によって囲まれる必要があります (header, footer など) 。

シンプルなデフォルトのレイアウトは次のようになります:

<html>
  <body>
    <header>ヘッダ</header>
    <%= yield %>
    <footer>フッタ</footer>
  </body>
</html>

blog 記事が blog/my-article.html.markdown に置かれているとします。すべての blog 記事が デフォルトの layout に代わり article_layout を使うように 指定します。 config.rb を編集:

activate :blog do |blog|
  blog.layout = "article_layout"
end

# または:

page "blog/*", :layout => :article_layout

layouts/article_layout.erb は次のようになります:

<% wrap_layout :layout do %>
  <article>
    <%= yield %>
  </article>
<% end %>

Note: Haml や Slim では次のように等号を使う必要があります:

= wrap_layout :layout do

通常のレイアウトと同じように, yield はテンプレートの出力内容が 配置される場所です。この例では次の出力になります:

<html>
  <body>
    <header>ヘッダ</header>
    <article>
      <!-- テンプレート/ブログ記事の内容 -->
    </article>
    <footer>フッタ</footer>
  </body>
</html>

完全なレイアウト無効化

いくつかの場合では, まったくレイアウトを使いたくない場合があります。 config.rb でデフォルトのレイアウトを無効化することで対応できます:

set :layout, false

# もしくは個別のファイルで:
page '/foo.html', :layout => false

© 2011–2022 Thomas Reynolds

コントリビュータ の助けを借りて コアチーム によって メンテナンスされています。

  • Twitter
  • GitHub