最近在做的一個ROR的web項目中遇到如下問題:
產品可以按類分類導航瀏覽,主要可以分為A,B,C三類,三類之下還有其他分類,同時,基類和其下 的分類都可以由使用者擴充。從橫向上,主類可以由使用者擴充,縱向上,使用者也可以擴充。
類別資訊儲存與categories表中:
id:integer 主鍵
name:string 類別名稱
parentid:integer 類別的父類
要求:
產生導覽功能表,並且可以含有子類的菜單可以通過點擊展開或關閉,並且可以按類別導航產品。
實現Ruby on Rails導覽功能表:
通過深度優先遍曆來產生菜單,在便利過程中構建菜單的html編碼,主要是使用了一個@htmlmenu的 string來拼接產生的html代碼,最終顯示在頁面中。
Ruby on Rails導覽功能表代碼:
def index @htmlmenu="" @htmlmenu+= "< ul>" @root = Category.find(:all,:conditions=>['parentid=0']) @root.each { |item| if Category.find_by_parentid(item.id) @htmlmenu+= "< li>< a href='#ChildMenu#{item.id}' onclick=\"DoMenu('ChildMenu#{item.id}')\">" else @htmlmenu+= "< li>< a href='/categories/#{item.id}'>" end @htmlmenu+= item.name @htmlmenu+= "< /a>" buildmenu item @htmlmenu+= "< /li>" } @htmlmenu+= "< /ul>" end private def buildmenu category @children = Category.find_all_by_parentid(category.id) if @children.size!=0 @htmlmenu+= "< ul id='ChildMenu#{category.id}' class='collapsed'>" @children.each { |item| if Category.find_all_by_parentid(item.id).size!=0 @htmlmenu+= "< li>< a href='#ChildMenu#{item.id}' onclick=\"DoMenu('ChildMenu#{item.id}')\">" else @htmlmenu+= "< li>< a href='/categories/#{item.id}'>" end @htmlmenu+= item.name @htmlmenu+= "< /a>" buildmenu item @htmlmenu+= "< /li>" } @htmlmenu+= "< /ul>" end end