无码视频在线观看,99人妻,国产午夜视频,久久久久国产一级毛片高清版新婚

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

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

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

    最近在做的一個ROR的web項目中遇到如下問題:

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

    類別信息存儲與categories表中:

    id:integer         主鍵

    name:string        類別名稱

    parentid:integer   類別的父類

    要求:

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

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

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

    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方法。

    說明:parentid=0是為了找到所有的基類,他們的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)航菜單的補充:

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

    1.1  代碼可以優(yōu)化,有些比較判斷沒有必要,懶得去掉了:)

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

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


    本文出自:億恩科技【mszdt.com】

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

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

    0371-60135900
    7*24小時客服服務(wù)熱線