快速业务通道

Ruby on Rails导航菜单自动生成的方法 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

Ruby on Rails导航菜单自动生成的方法

时间:2011-11-02 shwan

最近在做的一个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

Ruby on Rails导航菜单自动生成的方法(2)

时间:2011-11-02 shwan

遍历方法为private的buildmenu方法。

说明:parentid=0是为了找到所有的基类,他们的parentid默认为0;

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

< script type="text/javascript"> 
 
 
function DoMenu(emid){  
    var obj = document.getElementById(emid);  
    obj.className = (obj.className.toLowerCase() ==

 "expanded"?"collapsed":"expanded");  
   
}  
--> 
< /script> 
< style> 
 ul.collapsed {  
 display: none;  
}  
< /style>

有关Ruby on Rails导航菜单的补充:

1.这是一个雏形,关于性能问题有以下几点:

1.1  代码可以优化,有些比较判断没有必要,懒得去掉了:)

1.2  如果类别数据增多,如果担心过多的数据库访问,可以把这些写到程序初始化里去,不过缺点 是新增的类别需要重启服务器后可以生效

2.我觉得这个拿去做文件系统遍历很好,而且可以直接生成html页面~

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号