亚洲综合社区欧美综合色-欧美逼逼一区二区三区-国产老熟女高潮精品网站-国产日韩最新视频在线看

始創(chuàng)于2000年 股票代碼:831685
咨詢(xún)熱線(xiàn):0371-60135900 注冊(cè)有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補(bǔ)償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁(yè) > 幫助中心>文章內(nèi)容

Ruby on Rails導(dǎo)航菜單自動(dòng)生成的方法

發(fā)布時(shí)間:  2012/8/29 18:02:36

最近在做的一個(gè)ROR的web項(xiàng)目中遇到如下問(wèn)題:

產(chǎn)品可以按類(lèi)分類(lèi)導(dǎo)航瀏覽,主要可以分為A,B,C三類(lèi),三類(lèi)之下還有其他分類(lèi),同時(shí),基類(lèi)和其下的分類(lèi)都可以由用戶(hù)擴(kuò)展。從橫向上,主類(lèi)可以由用戶(hù)擴(kuò)展,縱向上,用戶(hù)也可以擴(kuò)展。

類(lèi)別信息存儲(chǔ)與categories表中:

id:integer         主鍵

name:string        類(lèi)別名稱(chēng)

parentid:integer   類(lèi)別的父類(lèi)

要求:

生成導(dǎo)航菜單,并且可以含有子類(lèi)的菜單可以通過(guò)點(diǎn)擊展開(kāi)或關(guān)閉,并且可以按類(lèi)別導(dǎo)航產(chǎn)品。

實(shí)現(xiàn)Ruby on Rails導(dǎo)航菜單:

通過(guò)深度優(yōu)先遍歷來(lái)生成菜單,在便利過(guò)程中構(gòu)建菜單的html編碼,主要是使用了一個(gè)@htmlmenu的string來(lái)拼接生成的html代碼,最終顯示在頁(yè)面中。

Ruby on Rails導(dǎo)航菜單代碼:

  1. def index  
  2.     @htmlmenu="" 
  3.     @htmlmenu+= "< ul>" 
  4.     @root = Category.find(:all,:conditions=>['parentid=0'])  
  5.     @root.each { |item|  
  6.     if Category.find_by_parentid(item.id)  
  7.     @htmlmenu+= "< li>< a href='#ChildMenu#{item.id}' onclick=\"DoMenu('ChildMenu#{item.id}')\">" 
  8.     else 
  9.       @htmlmenu+= "< li>< a href='/categories/#{item.id}'>" 
  10.     end 
  11.     @htmlmenu+= item.name  
  12.     @htmlmenu+= "< /a>" 
  13.     buildmenu item  
  14.     @htmlmenu+= "< /li>" 
  15.     }  
  16.     @htmlmenu+= "< /ul>" 
  17.   end 
  18.   private  
  19.   def buildmenu category  
  20.     @children = Category.find_all_by_parentid(category.id)  
  21.     if @children.size!=0  
  22.       @htmlmenu+= "< ul id='ChildMenu#{category.id}' class='collapsed'>" 
  23.       @children.each { |item|  
  24.         if Category.find_all_by_parentid(item.id).size!=0  
  25.           @htmlmenu+= "< li>< a href='#ChildMenu#{item.id}' onclick=\"DoMenu('ChildMenu#{item.id}')\">" 
  26.         else 
  27.                 @htmlmenu+= "< li>< a href='/categories/#{item.id}'>" 
  28.         end 
  29.  
  30.         @htmlmenu+= item.name  
  31.         @htmlmenu+= "< /a>" 
  32.         buildmenu item  
  33.         @htmlmenu+= "< /li>" 
  34.         }  
  35.       @htmlmenu+= "< /ul>" 
  36.  
  37.     end 
  38.       
  39.   end 

遍歷方法為private的buildmenu方法。

說(shuō)明:parentid=0是為了找到所有的基類(lèi),他們的parentid默認(rèn)為0;

在代碼中需要加入css和js:

  1. < script type="text/javascript"> 
  2.  
  3.  
  4. function DoMenu(emid){  
  5.     var obj = document.getElementById(emid);  
  6.     obj.className = (obj.className.toLowerCase() == "expanded"?"collapsed":"expanded");  
  7.    
  8. }  
  9. --> 
  10. < /script> 
  11. < style> 
  12.  ul.collapsed {  
  13.  display: none;  
  14. }  
  15. < /style> 

 

有關(guān)Ruby on Rails導(dǎo)航菜單的補(bǔ)充:

1.這是一個(gè)雛形,關(guān)于性能問(wèn)題有以下幾點(diǎn):

1.1  代碼可以?xún)?yōu)化,有些比較判斷沒(méi)有必要,懶得去掉了:)

1.2  如果類(lèi)別數(shù)據(jù)增多,如果擔(dān)心過(guò)多的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn),可以把這些寫(xiě)到程序初始化里去,不過(guò)缺點(diǎn)是新增的類(lèi)別需要重啟服務(wù)器后可以生效

2.我覺(jué)得這個(gè)拿去做文件系統(tǒng)遍歷很好,而且可以直接生成html頁(yè)面~


本文出自:億恩科技【m.1tcdy.com】

服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營(yíng)性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營(yíng)性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營(yíng)性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話(huà):0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話(huà):0371-60135900
  • 專(zhuān)注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號(hào)
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號(hào)總部企業(yè)基地億恩大廈  法律顧問(wèn):河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號(hào)
      0
     
     
     
     

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線(xiàn)