Categories
open all | close allTags
名称 | デュアル・コア | Aptana | Migration | カテゴリ | JustPosted | タグ | 国際化 | ドキュメント | パソコン | 認証 | rake | Subversion | CSRF | フォーム | rubygems | RESTful | テスト | Flash | スキンエンジンSearch
表出力の抽象化
管理画面の基本は表です。ブログやアイテムの一覧はもちろん,フォームもラベル部分と入力部分で表を使って表示することが多いと思います。そこで,管理画面の出力内容と表示を分離するため,表出力を抽象化してみました。
まず,出力内容はコントローラで次のような形で設定します。
def index
@blogs = @member.blogs
@table.header=[la('Blog Name'),la('Add Item'),la('Edit Item'),la('Comments'),\
la('Tags/Categories'),la('Settings'),('Delete Blog')]
@table.widths=[177]
@table.data = []
@blogs.each do |blog|
row = []
row << h(blog.bname)
row << context_link(new_admin_blog_item_url(@memberid, blog),blog,"commit", "page_add","add item")
row << context_link(admin_blog_items_url(@memberid, blog), blog, "commit", "page_edit","edit items")
row << context_link(admin_blog_comments_url(@memberid, blog),blog,"commentedit", "comments","comments")
row << context_link(admin_blog_categories_url(@memberid, blog),blog,"commentedit", "tag_red","categories")
row << context_link(edit_admin_blog_url(@memberid, blog),blog,"editsettings", "application_edit","settings")
row << context_link(admin_blog_url(@memberid, blog), blog,"deleteblog", "folder_delete","delete blog", \
:confirm=>'OK?', :method=>'delete')
@table.data << row
end
render
endここで@tableが表を抽象化したTable型のオブジェクトで,@table.headerに表頭,@table.widthsに列幅指定(あれば),@table.dataに表のボディ部分が入ります。
一方,表示側は
def show_table table
temp = <<HEAD
<div class="table">
<img src="/admin/img/bg-th-left.gif" width="8" height="7" alt="" class="left" />
<img src="/admin/img/bg-th-right.gif" width="7" height="7" alt="" class="right" />
HEAD
table.controller self
temp += table.html do |h|
h.options({:class=>'listing', :cellpadding=>"0", :cellspacing=>"0"})
h.head({:first=>'first', :last=>'last'})
h.body({:first=>'first style1', :last=>'last', :cycle=>[nil, 'bg']})
end
temp += '</div>'
endここでパラメータで与えられたtableが先ほどのTable型のオブジェクト。これに対して,table.htmlというメソッドで表の表示内容を指定しています。管理画面のすべての表に対して,このshow_table一つで対応できます。後はコンテンツ側を変えるだけ。
これで表部分はいいのですが,問題は表に入らないような要素がある場合。例えば,管理画面のトップページである,今の画面には新規ブログを作るボタンがあります。そこの部分は抽象化していないので,ビューに素のHTMLを書くことになってしまいました。今後はこういった要素の抽象化をするのか,あるいはこういった要素を排除していくのか考えていったほうがよさそうです。
Comments
No comments yet. You can be the first!