`
shwan
  • 浏览: 11638 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

RoR 自动生成分类导航菜单

阅读更多
最近在做的一个ROR的web项目中遇到如下问题:

产品可以按类分类导航浏览,主要可以分为A,B,C三类,三类之下还有其他分类,同时,基类和其下的分类都可以由用户扩展。从横向上,主类可以由用户扩展,纵向上,用户也可以扩展。

类别信息存储与categories表中:
id:integer         主键
name:string        类别名称
parentid:integer   类别的父类

要求:
生成导航菜单,并且可以含有子类的菜单可以通过点击展开或关闭,并且可以按类别导航产品。

实现:
通过深度优先遍历来生成菜单,在便利过程中构建菜单的html编码,主要是使用了一个@htmlmenu的string来拼接生成的html代码,最终显示在页面中。
代码:
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


遍历方法为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>


补充:
1.这是一个雏形,关于性能问题有以下几点:
  1.1  代码可以优化,有些比较判断没有必要,懒得去掉了:)
  1.2  如果类别数据增多,如果担心过多的数据库访问,可以把这些写到程序初始化里去,不过缺点是新增的类别需要重启服务器后可以生效
2.我觉得这个拿去做文件系统遍历很好,而且可以直接生成html页面~
3.希望有朋友可以提出自己的建议或是意见,大家交流
0
0
分享到:
评论

相关推荐

    初探ROR

    5. Generators:自动生成代码模板,加速开发速度。 6. Gem生态系统:Ruby社区拥有丰富的Gem(库),覆盖了各种功能,方便扩展和集成。 **四、ROR的实例应用** 许多知名网站如GitHub、Airbnb、Shopify等都基于Ruby ...

    RoR性能优化经验谈

    RoR(Ruby on Rails)是一种流行的开源Web开发框架,以其高效和简洁的代码著称。然而,随着网站规模的增长,性能优化成为必不可少的环节。在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在...

    ror中文资料

    **Ruby on Rails(简称RoR)中文资料** Ruby on Rails(RoR)是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。RoR强调“约定优于配置”...

    ror

    NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696

    RoRRobot 使用ProgramR 和AIML 基于RoR的自动问答机器人

    使用ProgramR 和AIML 基于RoR的自动问答机器人。

    神经网络ror resenet模型

    在CIFAR-10上达到89%的准确率,以及在CIFAR-100上达到72%的准确率,展示了ResNet和Ror模型在处理复杂图像分类任务上的强大能力。相比于其他传统的浅层网络或早期的深度网络,这样的准确率显著提高了模型的性能,表明...

    ror实例

    Ruby on Rails(简称RoR或Rails)是一种基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率并提供简洁、优雅的代码结构。"ror实例"可能指的是在学习或实践中,通过创建...

    ROR安装必备所有架包

    在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...

    RoR选题方向—源代码

    Ruby on Rails(RoR)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程。在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是...

    RoRBlog 基于RoR的博客系统

    基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。

    RoR中文解决方案(很不错哦)

    另一个文件“jascaffold”可能是一个RoR的生成器或插件,用于自动生成常见的CRUD(Create, Read, Update, Delete)操作的模型、控制器和视图代码,以此加速开发过程。Jascaffold可能参考了Java开发中的Scaffold概念...

    freemis 基于ror框架的mis

    3. **Scaffolding**:RoR提供快速原型开发工具,能自动生成基本的CRUD(创建、读取、更新、删除)操作的视图、控制器和模型代码,加速开发进程。 4. **Convention over Configuration**:RoR强调约定优于配置,减少...

    ror文本编辑插件

    ActiveScaffold通常用于后台管理界面,因为它能够自动生成大部分数据交互所需的代码,从而节省了大量的开发时间。 结合上下文,"ror文本编辑插件"可能已经集成了ActiveScaffold,提供了在ActiveScaffold生成的表单...

    RoR,十分钟做Blog

    3. IDE将自动生成符合RoR约定的项目结构,包括Controllers、Models和Views目录。 **配置数据库环境** 打开`database.yml`文件,配置数据库连接,特别是添加MySQL的用户名和密码(如果需要的话)。 **创建模型** 1....

    RoR 培训课程PPT

    ### RoR培训课程PPT知识点概述 #### 一、课程概览与背景介绍 - **课程性质**:本课程为为期五天的Ruby on Rails(简称RoR)入门级培训,适合初学者快速掌握RoR的基本概念和技术要点。 - **讲师信息**:由Peter ...

    ROR 文件的上传与下载

    ### ROR 文件的上传与下载:深入解析与实践 在Ruby on Rails(简称ROR)框架下,处理文件的上传与下载是一项常见的需求,尤其是在构建包含媒体内容的应用程序时。本文将基于给定的文件信息,详细阐述如何在Rails...

    Windows 上搭建 ROR环境

    ### Windows上搭建Ruby on Rails(ROR)环境详解 #### 一、引言 随着Web开发技术的不断发展,Ruby on Rails(简称Rails或ROR)作为一种高效、简洁且优雅的Web开发框架,受到了广大开发者的青睐。然而,在Windows...

    ROR环境配置

    在命令行中输入`rails new project_name`,其中"project_name"是你项目的名称,这将生成一个完整的ROR项目结构。 为了实现更好的开发体验,我们需要集成IDE或代码编辑器。这里我们关注的是Eclipse。Eclipse是一款...

Global site tag (gtag.js) - Google Analytics