STEP 2: レイアウト

2010/01/27

今後の開発作業を気持ちよく進めるために、少し画面の体裁を整えておきましょう。

まず、レイアウト用のHTMLテンプレートを作成します。

$ edit app/views/layouts/application.html.erb

ここから先、エディタでソースファイルを編集する作業を上記のように表現します。edit の部分は、実際にあなたが使用しているエディタのコマンド(viなど)で置き換えてください。IDEを使用している場合は、新規ファイル作成や編集メニューを使ってファイルを開いてください。

ファイルの中身を次のように編集します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title><%= document_title %></title>
  <%= stylesheet_link_tag 'application' %>
</head>
<body>
  <div id="wrapper">
    <%= render :partial => 'shared/header' %>
    <div id="contents">
      <%= yield %>
    </div>
    <%= render :partial => 'shared/footer' %>
  </div>
</body>
</html>

次に、レイアウトの6行目で使用しているヘルパーメソッド document_title と、後で使う予定の copyright を作成します。

$ edit app/helpers/application_helper.rb
module ApplicationHelper
  def document_title
    if @document_title.present?
      h(@document_title) + ' - Plaka'
    else
      'Plaka'
    end
  end

  def copyright
    text = 'Copyright &;copy; 2010'
    if Date.today.year > 2010
      text << '-' + Date.today.year.to_s
    end
    text << ' Oiax Inc., All Rights Reserved.'
    text
  end
end

続いて、ヘッダ用の部分テンプレート shared/header を作成しましょう。

$ mkdir app/views/shared
$ edit app/views/shared/_header.html.erb

[訂正] ファイル名を 'header.html.erb' から '_header.html.erb' に修正しました。部分テンプレートのファイル名は、アンダースコア(_)で始める必要があります。(2010/06/06)

<div id="header">
  <%= link_to_unless_current 'Plaka', :root %>
</div>

link_to_unless_current は、あるページへのハイパーリンクを生成するメソッドです。第1引数にリンク文字列、第2引数にリンク先を指定します。リンク先の指定方法にはいろいろありますが、ここでは :root というシンボルを指定しています。

第1回で config/routes.rbmap.root :controller => 'top', :action => 'index' という記述を追加しました。この記述によって、Topコントローラのindexアクションに :root という「名前」が与えられます。

名前を与えられたアクションへのハイパーリンクは、このように簡潔に記述できます。

なお、link_to_unless_current は、現在のページのURLとリンク先のページのURLが同一の場合、ハイパーリンクではなく単なる文字列を返します。

同様に、フッタ用の部分テンプレート shared/footer も。

$ edit app/views/shared/_footer.html.erb

[訂正] ファイル名を 'footer.html.erb' から '_footer.html.erb' に修正しました。(2010/06/06)

<div id="footer">
  <%= copyright %>
</div>

最後に、カスケーディングスタイルシート (CSS) のファイルを作って、レイアウトが完成です。

$ edit public/stylesheets/application.css
div#wrapper {
  width: 600px;
  margin: 10px auto;
  border: solid 1px #666;
  background-color: #066;
}

div#header, div#footer {
  background-color: #000;
  color: #ccc;
  margin: 5px;
  padding: 5px;
}

div#contents {
  background-color: #fff;
  color: #000;
  margin: 5px;
  padding: 5px;
}

ブラウザを再読込すると、次のような画面に変わります。

画面キャプチャ01