List-O-Maticでメニューバーを作ってみる。
そろそろメニューバーが欲しくなってきた。良さそうなデザインが無いか検索してみると、オサレなメニューバーを作ろうのページで、List-O-Maticの存在を知る。いくつかの質問に答えてデザインを選ぶと、HTMLとCSSのコードを出力してくれる。そのコードをコピーして自分のページに貼付ければ、あっという間にメニューの完成、ちゃんと使える!早速、CSVサーバーにも利用してみた。
レイアウトの作成
- softwarebookの時と同じように、メニューの表示は、パーシャルファイル_menu.rhtmlで描画する。
- メニュー用のスタイルシートも、新たにlist_o_matic.cssを用意して、そこで設定するとこにした。
<%# ---------- app/views/layouts/csvs.rhtml ---------- %> <html> <head> <title>Csvs: <%= controller.action_name %></title> <%= stylesheet_link_tag 'scaffold' %> <%= stylesheet_link_tag 'list_o_matic' %><%#<------ メニュー用のスタイルシートを読み込み %> </head> <body> <%= render :partial=>"layouts/menu" %><%#<------ メニューを表示 %> <%= render :partial=>"layouts/flash" %> <%= yield %> </body> </html>
メニューの描画
- _menu.rhtmlは、実際にメニューを描画するところ。ユーザーのログイン情報を表示する部分と、メニューリンクを表示する部分の2部構成にした。
- link_if_authorizedは、user_engineが提供してくれるヘルパメソッド。
- ログインユーザーに操作権限がある場合だけ、リンク表示を生成してくれる。操作権限が無い場合は、何も表示しない。
- :show_text => trueオプションを指定すれば、操作権限が無い場合でも、文字列だけ表示する。
- :wrap_in => "li"オプションを指定すると、<li>タグで囲んだリンク表示を生成してくれる。
<%# ---------- app/views/layouts/_menu.rhtml ---------- %> <%# ログイン情報を表示 %> <div id="info_bar"> <% if session[:user] %> ようこそ! <%= link_if_authorized "#{current_user.fullname}", :controller => 'user', :action => 'edit' %> さん <%= "(権限 = #{current_user.roles.map {|role| role.name}.join(', ')})" %> <% else %> ようこそ! ゲストユーザー さん <% end %> </div> <%# メニューリンクを表示 %> <div id="navcontainer"> <ul id="navlist"> <%= link_if_authorized 'CSVリスト', {:controller => 'csvs', :action => 'list'}, :wrap_in => "li" %> <%= link_if_authorized 'パスワード変更', {:controller => 'user', :action => 'change_password'}, :wrap_in => "li" %> <%= link_if_authorized '権限管理', {:controller => 'role', :action => 'list'}, :wrap_in => "li" %> <%= link_if_authorized 'ユーザー管理', {:controller => 'user', :action => 'list'}, :wrap_in => "li" %> <%= link_if_authorized 'アクセス権管理', {:controller => 'permission', :action => 'list'}, :wrap_in => "li" %> <%= link_if_authorized 'ログアウト', {:controller => 'user', :action => 'logout'}, :wrap_in => "li" %> </ul> </div>
- <div id="navcontainer">ブロックは、以下のList-O-Maticが生成したコードが元になっている。
List-O-Maticが生成したコード
<div id="navcontainer"> <ul id="navlist"> <li><a href="href1" title="title1">text1</a></li> <li><a href="href2" title="title2">text2</a></li> </ul> </div>
スタイルシートの設定
- スタイルシートも、ほぼList-O-Maticが生成したコードを利用した。修正したのは右側にコメントしている行だけ。
- 今後、もしメニューバーのデザインを変えたくなったら、このスタイルシートの設定を変更するだけでOKだ。
/* ---------- public/stylesheets/list_o_matic.css ---------- */ #navlist { margin: 0; padding: 0 0 22px 10px; /*修正前 0 0 20px 10px*/ border-top: 1px solid #000; /*追加*/ border-bottom: 1px solid #000; background-color: whitesmoke; /*追加*/ } #navlist ul, #navlist li { margin: 0; padding: 0; display: inline; list-style-type: none; } #navlist a:link, #navlist a:visited { float: left; line-height: 16px; /*修正前 14px*/ font-weight: bold; margin: 0 10px 4px 10px; padding: 2px 0 0 0; /*追加*/ text-decoration: none; color: #999; } #navlist a:link#current, #navlist a:visited#current, #navlist a:hover { border-bottom: 4px solid #000; padding-bottom: 0px; /*修正前 2px*/ background: transparent; color: #000; } #navlist a:hover { border-bottom: 4px solid #888; /*追加*/ color: #666; /*修正前 000*/ }