You are browsing the archive for 开源产品和技术.

Avatar of eric

by eric

rails3中jqgrid的应用

十月 13, 2010 in Ruby/Ruby on Rails

       jqGrid是一款非常优秀的ajax表格,它通过ajax回调机制来动态和服务器进行数据的交互。
       jqGrid是基于jquery,是jquery家族一个组件,所以它的运行需要jquery库的支持。那么在web application中使用jqGrid的时候,必须先导入jquery包,同时它支持jquery的UI theme。那么如果你不喜欢jqGrid的默认颜色,可以通过jquery UI的theme去更改外观。
       在这里介绍rails里面使用jqGrid。其中jqGrid支持很多功能,支持对数据进行格式,查找,编辑,子表格,树表格,分组,显示和隐藏字段以及导入和导出功能。同时jqGrid针对于很多功能都是用单一个js文件来实现,所以你可以根据自己想要的功能来选择系统想要的js文件。

      在rails3里面使用jqGrid非常的方便,但是针对于rail3需要使用jquery,而不采用prototype的javascript库。由于本文主要介绍jqGrid在rails3里面的使用,就先假设rails3系统已经使用jquery。

1.首先下载jqGrid针对于rails3的版本的插件:
     rails plugin install git://github.com/kritik/2dc_jqgrid_rails3.git
2.下载完成以后,这个插件可以自动安装,会在public/javascript以及public/stylesheets 下面创建关于jqGrid的目录。但是你会发现其中关于这些目录多生成一层目录。这对于这种情况下,rails如果不进行设置的话,将不能访问这些目录的图片、javascript和css等。
3. 修改插件中的rake命令,阅读插件下面的lib/tasks/2dc_jqgrid_tasks.rake文件,发现下面这句话有问题,会将 source下面包括目录将所有的内容进行拷贝,而这个时候不需要目录,而仅仅需要目录下面的内容,所以使用copy_entry来实现:
     FileUtils.copy_r(source, target, :verbose => true)
    修改为
     FileUtils.copy_entry(source, target, :verbose => true)
4. 在当前工程目录下面运行rake jqgrid:install,可以生成正确的jqgrid的文件目录。
    文件目录如下:
    –public
      |
      |– images
      |   |
      |   |–jqgrid    
      |
      |– javascripts
      |   |
      |   |–jqgrid
      |
      |– stylesheets
          |
          |–jqgrid
5.根据功能选择,删除不要jqgrid的javascript文件,例如针对于i18n目录下面的可以只保留中文和英文两种。
6.而针对于css文件也需要进行修改,其中针对于图片的话也需要进行的url也要进行修改,将原来的url(images/..)修改为url(/images/jqgrid/..)。
7.修改scaffold的模板文件index.html.erb文件,使其能够显示jquery表格。
        <div class="page_header">
           <h1>Listing <%= plural_name %></h1>
    </div> 
    <div class="page_content">
        <div class ="basic_form">
            <%%=raw jqgrid("Listing <%= plural_name %>", "<%= plural_name %>", "/<%= plural_name %>",
            [
            <% attributes.each_with_index do |attribute, i|-%>
            { :field => "<%= attribute.name %>", :label => "<%= attribute.name %>" }<% if i < attributes.size-1 -%>,<% end %>
            <% end -%>
            ] , {:autowidth=>true}
        ) %>
        </div>
    </div>
  运行scaffold generator来生成整套程序的框架:
  rails g scaffold test5 name:string description:string
  这个时候,直接访问index页面,有下面的表格的显示。见下图:

image

其中生成的index.html.erb页面代码如下:
       <div class="page_header">
       <h1>Listing test5s</h1>
    </div> 
    <div class="page_content">
        <div class ="basic_form">
                <%=raw jqgrid("Listing test5s", "test5s", "/test5s",
            [
            { :field => "name", :label => "name" },
            { :field => "description", :label => "description" }
            ] , {:autowidth=>true}
        ) %>
        </div>
    </div>

  8.rails3给了我们很大的方便,其中就是所有的查询都可以通过scope的方式来实现。那么这个时候,在model里面增加下面的代码。

            #动态构建语言查询,传入的column为当前表+字段名
            scope :match_value, lambda { |column, value|
            return {} if value.blank?
              { :conditions => ["#{column} like ?", "%#{value}%"] }
            }
            #排序构建
            scope :column_order, lambda { |key_part1,key_part2|
              { :o rder => key_part1.to_s+" "+ key_part2.to_s
              }
            }
  9.在application里面增加翻页的代码:

#进行分页,返回分页后的scope和scope的记录的总记录数
  def paginate(scoped,page,per_page)
     page||=1
     per_page||=10
     [scoped.offset((page.to_i-1)*per_page.to_i).limit(per_page),scoped.count]
  end
  10.这个时候,仅仅是显示表格,但是我们如何显示表格内容,前面也一再提到jqGrid是一款ajax表格的工具,可以通过json或者xml来传输数据。那么熟悉rails的开发人员来,scaffold默认生成的index action中,默认生成format.html和format.xml两种。这个时候,为针对于修改index为下面的代码:
  def index
    @test5=Test5.column_order(params[:sidx],params[:sord])

     if params[:_search] == "true"
       @test5 = @test5.match_value("#{Test5.table_name}.name",params[:name]).
                match_value("#{Test5.table_name}.description",params[:description])
    end

    @test5,count=paginate(@test5,params[:page],params[:rows])

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :x ml => @test5 }
      format.json { render :json => @test5.to_jqgrid_json([:name,:description],params[:page], params[:rows], count) }
    end
  end

  11.其中针对to_jqgrid_json([:name,:description],params[:page], params[:rows], count) }这句中,在这里定义前端表格里面显示数据中field定义的字段内容,顺序要一一对应。其中查询结果如下图:

          all

query       当然jqGrid还提供了很多功能,例如在表格里面增加数据,显示主表格和子表格等等。这些功能实现起来都大同小异,这里就不在详细介绍了。

Passenger实现Redmine和Apache集成

三月 9, 2010 in Ruby/Ruby on Rails

Redmine 0.9.3默认使用RoR自带的web服务器WEBrick,默认的端口是3000,很多人将Redmine集成到apache,nginx或tomcat中,集成到apache通常采用CGI方式来集成,配置起来比较繁杂。Phusion Passenger组件是专门为apache和nginx开发的用来部署Ruby on Rails应用的,配置起来非常的方便,使用下来感觉页面的操作速度比WEBrick要快很多,本文记录了如何安装passenger来集成Redmine到apache服务器。

环境信息:

  1. CentOS5
  2. Redmine 0.9.3
  3. Passenger 2.2.11

Read the rest of this entry →

CentOS5下安装Redmine0.9.3

三月 8, 2010 in Ruby/Ruby on Rails

CentOS下安装Redmine的过程是一个痛苦的过程,其间遇到了很多问题,借助强大的网络才顺利完成了安装工作,在此记录一下安装的细节以备查阅。

环境信息:

  1. CentOS 5
  2. Ruby 1.8.7
  3. RubyGems 1.3.6
  4. Ruby on Rails 2.3.5
  5. Redmine 0.9.3
  6. Postgresql 8.4.2

 

Read the rest of this entry →

基于RoR的项目协作平台Redmine

三月 7, 2010 in Ruby/Ruby on Rails

一直想找一个开源的项目协作平台来管理多个项目,能够实现同时管理多个项目上的问题、文档、总结等项目资源,同时能够根据项目进行某些论题的讨论,开始看到GForge是专门针对项目协作开发的,同时也发现很多人在使用它来管理项目,但经过一段时间的测试使用后发现GForge的确是一个优秀的开源协作产品,但是同样存在很多问题,其中本人认为最大的问题就是功能组织很混乱,功能导航有时候搞得用户不知如何是好,使用起来非常的不方便;另外如不支持中文的检索;还有很多功能在社区版上面是没有的,只有需要付费的高级版本中才有,也正是由于这点,基于GForge的一个分支产生了新的开源项目FusionForge。

Read the rest of this entry →

Ubuntu中配置MSN,QQ,飞信和GTalk

一月 6, 2010 in 开源产品和技术

在Windows操作系统中,不论是MSN,还是QQ,还是GTalk等,大家肯定都不陌生,甚至这些优秀的IM工具已经融入到了我们的日常生活中,成为 生活与工作的必备工具,那么既然将主操作系统移植到了Linux,那么就必须搞定这些和生活息息相关的小工具,MSN,QQ,飞信,GTalk一个都不能 少:)

1、MSN
对于技术人员来说,所有的IM工具中最重要的应该就是MSN了,在这里强烈推荐Emesene。
Emesene 是一个使用Python+GTK编写的MSN Messenger的软件,以GUN GPLV2协议发布,界面非常类似官方MSN Messenger,同时还非常轻便。但凡用过Windows下的MSN Messenger都能很好的上手这个软件,无论是登录界面还是使用界面都让使用过官方MSN Messenger的人有一种曾似相识的感觉。
在 Emesene下我们一样可以像Windows下的MSN Messenger使用“显示我正在听的歌曲”功能,可以给对方发送“nudge”(屏闪),可以更改显示图片。这一切操作都和Windows MSN Messenger(Windows Live Messenger)非常相似。目前emesene还未能支持Webcam(摄像头)的使用,不排除未来为之编写出Plugin的可能。
更多的介绍和下载可参考这里

2、QQ
记得原来用Linux时,QQ一直是个比较麻烦的东西,不论是Eva还是Luma,都存在着各种各样的不足,而且还非常容易崩溃(Eva的鼠标右键崩溃的问题不知被多少人诟病了)。但现在再也不用如此不便了,腾讯推出了其官方的Linux版本的QQ,具体参考这里。由于可以直接下载.deb格式,因此直接安装即可,无须任何配置。
在短暂的安装后,就可以看到与Windows没太多差别的可爱的QQ了。
Read the rest of this entry →