Step by Step Ruby on Rails

Ruby on Railsで実際にWebサイトを構築する手順をまとめています。

Bootstrap3のoffcanvasを使ってrefineryのレイアウト

Bootstrap3のoffcanvasを使ってrefineryのレイアウトを設定する手順をまとめました。
 
(1)refineryのデフォルトのレイアウトファイルを確認
 
$ more app/views/layouts/application.html.erb

<!DOCTYPE html>
<%= render "/refinery/html_tag" %>
  <% site_bar = render('/refinery/site_bar', :head => true) -%>
  <head>
    <%= render "/refinery/head" %>
  </head>
  <body id="<%= canonical_id @page %>">
    <%= site_bar -%>
    <div id="page_container">
      <header id="header">
        <%= render "/refinery/header" -%>
      </header>
      <section id="page">
        <%= yield %>
      </section>
      <footer>
        <%= render "/refinery/footer" -%>
      </footer>
    </div>
    <%= render "/refinery/javascripts" %>
  </body>
</html>

下記パーシャルを使用しています。
"/refinery/html_tag"
'/refinery/site_bar'
"/refinery/head"
"/refinery/header"
"/refinery/footer"
"/refinery/javascripts"
 
(2)デフォルトのヘッダーをオーバーライド
 
デフォルトのヘッダーパーシャルをオーバーライドします。
 
"rake refinery:override"を使うとデフォルトのパーシャルをローカルにコピーできます。
 
$ rake refinery:override view=refinery/_header.html
(in /home/rails/rails_projects/blog)
create app/views/refinery/_header.html.erb
 
上記コマンドによって"app/views/refinery/"ディレクトリ内にデフォルトのヘッダーをコピーできました。
 
(3)Bootstrap3のoffcanvasを使ってナビゲーションヘッダーとサイドバーを作成
 
※Bootstrap3の導入手順はこちら
 
1)Bootstrap3のサンプルoffcanvasを入手、配置
 
①ブートストラップの公式サイトから"source"版をダウンロード
"examples"フォルダ内の"offcanvas"フォルダ内から入手。
 
②offcanvas.jsをapp/assets/javascripts/にアップロード
 
③offcanvas.cssの中身をapp/assets/stylesheets/custom.css.scssにコピー
 
2)ヘッダーパーシャル作成
 
下から4行がデフォルトの設定で、それより上がブートストラップ3のサンプルからの流用です。
 
$ vi app/views/refinery/_header.html.erb

<div class="navbar navbar-fixed-top navbar-inverse" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">Project name</a>
    </div>
    <div class="collapse navbar-collapse">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Home</a></li>
        <li><a href="#about">About</a></li>
        <li><a href="#contact">Contact</a></li>
      </ul>
    </div><!-- /.nav-collapse -->
  </div><!-- /.container -->
</div><!-- /.navbar -->

<div class="container">

  <div class="row row-offcanvas row-offcanvas-right">

    <div class="col-xs-12 col-sm-9">
      <p class="pull-right visible-xs">
        <button type="button" class="btn btn-primary btn-xs" data-toggle="offcanvas">Toggle nav</button>
      </p>
      <h1 id='logo'>
        <%= link_to Refinery::Core.site_name, refinery.root_path %>
      </h1>
      <%= Refinery::Pages::MenuPresenter.new(refinery_menu_pages, self).to_html %>

 
3)右サイドバーパーシャル作成
 
offcanvasは右サイドバーの2カラム構成になっているので、右サイドバー部のパーシャルを作成します。
 
$ vi app/views/refinery/_sidebar.html.erb

  <div class="col-xs-6 col-sm-3 sidebar-offcanvas" id="sidebar" role="navigation">
    <div class="list-group">
      <a href="#" class="list-group-item active">Link</a>
      <a href="#" class="list-group-item">Link</a>
      <a href="#" class="list-group-item">Link</a>
      <a href="#" class="list-group-item">Link</a>
      <a href="#" class="list-group-item">Link</a>
      <a href="#" class="list-group-item">Link</a>
      <a href="#" class="list-group-item">Link</a>
      <a href="#" class="list-group-item">Link</a>
      <a href="#" class="list-group-item">Link</a>
      <a href="#" class="list-group-item">Link</a>
    </div>
  </div><!--/span-->
</div><!--/row-->

 
4)レイアウト全体(application.html.erb)
 
新たに作成したサイドバパーシャルを追加した上、下記のようにレイアウトを修正します。
 
$ vi app/views/layouts/application.html.erb

<!DOCTYPE html>
<%= render "/refinery/html_tag" %>
  <% site_bar = render('/refinery/site_bar', :head => true) -%>
  <head>
    <%= render "/refinery/head" %>
  </head>
  <body id="<%= canonical_id @page %>">
    <%= site_bar -%>
    <%= render "/refinery/header" -%>
      <section id="page">
        <%= yield %>
      </section>
    </div><!--/header + main-->
    <%= render "/refinery/sidebar" -%>
    <footer>
      <%= render "/refinery/footer" -%>
    </footer>
    </div>
    <%= render "/refinery/javascripts" %>
  </body>
</html>