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>