ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Ruby勉強会@広島コミュのHowtoWrapViewsWithLayouts

  • mixiチェック
  • このエントリーをはてなブックマークに追加
【HowtoWrapViewsWithLayouts】

ActionPackコンポーネントにはビュー周りのプレゼンテーションをラップすることに使う「レイアウト」という機能があります。(ドキュメントはhttp://ap.rubyonrails.org/classes/ActionController/Layout/ClassMethods.html を参照して下さい)

レイアウトを使うには、コントローラを下記のようにして下さい。

class FriendsController < AbstractApplicationController
 include FriendsHelper
 layout "layouts/standard"

それから次のようなコードを書いた、views/layout/standard.rhtmlファイルを作成します。

<!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">
  <head>
    <title>RailsTest: <%= @page_title %></title>
  </head>
  <body>
    <div>The header part of this layout</div>
    <div><%= @content_for_layout %></div>
    <div>The footer part of this layout</div>
  </body>
</html>

それからチュートリアルの例題であるビューのdisplay.rhtmlファイルを開いて、もはや不要になったタグなどは既にこのレイアウトにありますので取り除いてください。

あなたはtitleタグの変数があることに気がつくでしょう。その変数に値を代入するためにコントローラのlistメソッドを修正します。

def list
 @page_title = "List Friends"
 @person = Person.find(1)
end

これからビューをロードします。ヘッダー、フッターがあるはずです。

注意:もしlayouts/application.rhtmlがあるのでしたら、これは自動的にピックアップされるでしょう。コントローラで指定する必要はありません。

部分レイアウト:

レイアウトをもっとよくするためには、レイアウトの一部を個別のファイルにとりだすことができます。そしてそれらをレイアウト内に配置します。これはActionView::Partialsを使って行います。

この例題は双方とも同じヘッダーを共有する2ペインと3ペインのレイアウトがあります。その結果、重複を避けることができます。

<div id="header"><%= render_partial "layouts/header" %></div>

上記の例は、レイアウトフォルダにある_header.rhtmlの内容がメインのレイアウトにレンダリングされます。WEB標準なデザインやレイアウトになるようにして下さい。Railsを使えばそういうレイアウトをうまく作ることができます。

動的なレイアウト:

 class WeblogController < ActionController::Base
  layout :writers_and_readers

  def index
   # fetching posts
  end

  private
   def writers_and_readers
    logged_in? ? "writer_layout" : "reader_layout"
   end

ドキュメントを参照して下さい。(http://ap.rubyonrails.org/classes/ActionController/Layout/ClassMethods.html)

カテゴリー:Howto

コメント(0)

mixiユーザー
ログインしてコメントしよう!

Ruby勉強会@広島 更新情報

Ruby勉強会@広島のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。