表出力の抽象化

管理画面の基本は表です。ブログやアイテムの一覧はもちろん,フォームもラベル部分と入力部分で表を使って表示することが多いと思います。

そこで,管理画面の出力内容と表示を分離するため,表出力を抽象化してみました。
まず,出力内容はコントローラで次のような形で設定します。
  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を書くことになってしまいました。今後はこういった要素の抽象化をするのか,あるいはこういった要素を排除していくのか考えていったほうがよさそうです。


13 Sep, 2008 | Foodyn ( 実装メモ , 管理画面 ) | | Andy
« Prev item - Next Item »
---------------------------------------------

Comments


No comments yet. You can be the first!


Leave comment

© 2007 yoursite.com | Designed by DesignsByDarren
Ported to Nucleus CMS: Suvoroff