メニューバーの表示機能を見直す。
今までもメニューバーを一応表示していたが、機能が不足しているのは明らかだ...。
問題だと思うこと
- UserEngineの管理画面へのリンクが提供されていない。その管理画面を表示するために、URLを直接アドレスバーに入力していた。
- LoginEngine/UserEngineの管理画面ではメニューバーが消えてしまう。ソフトウェアブックのページに戻るリンクもない。ブラウザの戻るボタンに頼っている。
- 各種メッセージが、メニューバーの上に表示されてしまう。メニューは常に、操作環境の一番上にあるべきだ。
- 見た目も悪い。
そんな問題を解決したくて、以下のように作業してみた。
メニューバー表示の描画ファイルを分けた。(app/views/layouts/_menu.rhtml)
メニューバー描画用のパーシャルファイルを作成した。実現したいのは以下の機能。
- Admin、User、Guestの権限によって、表示を変更する。
- Admin権限では、LoginEngine/UserEngineの管理画面へのリンクを表示する。(権限管理、ユーザー管理、アクセス権管理)
- 管理画面のときは、ソフトウェアブックに戻るリンクを表示する。(トップ)
- ログアウトしても、メニューバーは常に表示する。
<%# ------ファイル名: app/views/layouts/_menu.rhtml ---- %> <dl class="menu"> <% if session[:user] %> <dt>ようこそ!<%= link_to "#{current_user.lastname} #{current_user.firstname}", :controller => 'user', :action => 'edit' %> さん</dt> <dd> | <%= link_to 'ログアウト', :controller => 'user', :action => 'logout' %> | <%= link_to 'パスワード変更', :controller => 'user', :action => 'change_password' %> | <% if session[:user].admin?() %> <%= link_to '権限管理', :controller => 'role', :action => 'list' %> | <%= link_to 'ユーザー管理', :controller => 'user', :action => 'list' %> | <%= link_to 'アクセス権管理', :controller => 'permission', :action => 'list' %> | <% end %> <% unless controller.controller_name == "softwares" %> <%= link_to 'トップ', :controller => 'user', :action => 'home' %> | <% end %> </dd> <% else %> <dt>ようこそ! ゲストユーザー さん</dt> <dd> </dd> <% end %> </dl>
LoginEngine、UserEngineからのメッセージの描画ファイルを分けた。(app/views/layouts/_flash.rhtml)
LoginEngine、UserEngineからのフラッシュメッセージを表示する部分。
<%# ------ファイル名: app/views/layouts/_flash.rhtml ---- %> <% for name in [:notice, :warning, :message] %> <% if flash[name] %> <div align="center"> <div class="flashNotice"> <p style="color: green"><%= flash[name] %></p> </div> </div> <% end %> <% end %>
レイアウトファイルの修正(app/views/layouts/)
- 今まで直接描画していた部分をrender :partialに置き換える。
- _menu.rhtmlをまず最初に描画する。描画順に気を付ける。
- layoutsフォルダ内の_menu.rhtmlを描画するには、render :partial=>"layouts/menu"と指定する。
- もし、render :partial=>"menu"と指定すると、app/views/softwares/_menu.rhtmlを描画することになる。
<%# ------ファイル名: app/views/layouts/softwares.rhtml ---- %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Softwares: <%= controller.action_name %></title> <%= stylesheet_link_tag 'scaffold' %> <%= javascript_include_tag :defaults %> </head> <% store_location %> <body> <%= render :partial=>"layouts/menu" %><%# <---パーシャルファイルに置き換え %> <%= render :partial=>"common/notice" if flash[:notice] -%> <%= render :partial=>"common/error" if flash[:error] -%> <%= render :partial=>"layouts/flash" %><%# <---パーシャルファイルに置き換え %> <%= @content_for_layout %> </body> </html>
- user.rhtml、role.rhtml、permission.rhtmlには、以下のレイアウトを設定した。(内容は3ファイルとも、すべて同じ)
<%# ------ファイル名: app/views/layouts/user.rhtml、role.rhtml、permission.rhtml ---- %> <html> <head> <title><%= controller.controller_name %>: <%= controller.action_name %></title> <%# スタイルシートは、後の設定が優先される %> <%= stylesheet_link_tag 'scaffold' %> <%= engine_stylesheet "login_engine" %> <%= engine_stylesheet "user_engine" %> <%= engine_javascript "user_engine" %> </head> <body> <%= render :partial=>"layouts/menu" %><%# <---追加 %> <%= render :partial=>"layouts/flash" %><%# <---追加 %> <%= yield %> </body> </html>
スタイルシートの設定(public/stylesheets/)
メニューバーに上下のラインと背景色を設定してみた。
/* ------ファイル名: public/stylesheets/scaffold.css ---- */ .menu { border-top: 2px honeydew solid; border-bottom: 2px honeydew solid; background-color: ghostwhite; }
jascaffold、LoginEngine、UserEngineのフォントや書式の統一感を出すために、以下の変更を行う。(標準のscaffoldのフォントに統一した。)
/* ------ファイル名: public/stylesheets/scaffold.css ---- */ body{ color:#333; background-color: #fff; /*margin:10px 5% 30px 5%; <---削除 */ /*font-size:85%; <---削除 */ } body, p, ol, ul, td { font-family: verdana, arial, helvetica, sans-serif; font-size: 13px; line-height: 18px; }