`
秦朝古月
  • 浏览: 227187 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

为你的Rails网站添加OpenSearch功能

    博客分类:
  • Ruby
阅读更多
如果你是用过Google的搜索条,就会知道,它会根据你的输入实时的列出相关的搜索项目。让我们在自己的 Rails 网站里也添加这一功能。

1. 新建application
    创建一个 controller images,它包含三个 action。再创建一个 model image,要有个字段为 filename。
ruby 代码
  1. rails searchdemo  
  2. cd searchdemo  
  3. ruby script/generate controller images index suggest you_choose  
  4. ruby script/generate model image  

2. search.xml
  在 public 目录下创建 search.xml。 URL-TO-AN-ICON-FILE要换成你自己网站icon文件的URL。 YOUR-ADDRESS换成你自己的网址。
xml 代码
 
  1. xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < OpenSearchDescription   xmlns = "http://a9.com/-/spec/opensearch/1.1/"    
  3.                        xmlns:moz = "http://www.mozilla.org/2006/browser/search/" >   
  4.     < ShortName > Image Search <!---->ShortName >   
  5.     < Description > Image Search <!---->Description >   
  6.     < InputEncoding > UTF-8 <!---->InputEncoding >   
  7.     < Image   height = "16"   width = "16"   type = "image/x-icon" > URL-TO-AN-ICON-FILE <!---->Image >   
  8.     < Url   type = "application/x-suggestions+json"   template = "http://YOUR-ADDRESS/images/suggest?filename={searchTerms}" />   
  9.     < Url   type = "text/html"   method = "GET"   template = "http://YOUR-ADDRESS/images/you_choose/{searchTerms}" />   
  10. <!---->OpenSearchDescription >   

3. Controller
     rhtml 的内用就省略了。
ruby 代码
 
  1. def  suggest  
  2.   headers["Content-Type" ] =  "application/x-suggestions+json"   
  3.   codes = Image.find(:all , :conditions =>[ "filename LIKE ?" ,params[ :filename ]+ "%" ], :limit =>10, :group => "filename" , :order => "filename" )  
  4.   @res  = codes.map{  |c | c.filename }    
  5.   render  :text  => [params[ :filename ],  @res ].to_json  
  6. end   
  7.   
  8. def  you_choose  
  9.   @image_pages @images  = paginate  :images :per_page  => 20,  
  10.                                    :order  => 'filename',  
  11.                                   :conditions  => [ "filename LIKE ?" ,params[ :filename ]+ "%" ]  
  12. end   

4. Settings
    layouts/images.rhtml 文件中,追加下面的 link。
xml 代码
 
  1. < link   rel = "search"   type = "application/opensearchdescription+xml"   title = "Search a Image"   href = "http://YOUR-ADDRESS/search.xml"   />   


    routes.rb 里,追加下边的映射。

ruby 代码
 
  1. map.connect ' :controller / :action '  


5. 进阶
    想上边那样设定的话,已经为网站追加了OpenSearch功能。可是当测试网址和实际网址不同的时候,xml 文件里的静态URL就需要修改。让我们用 url_for 将它改进。
    追加一个 action opensearch。

ruby 代码
 
  1. def  opensearch  
  2.   headers["Content-Type" ] =  "application/opensearchdescription+xml; charset=utf-8"   
  3.   render :layout  =>  false   
  4. end    

    opensearch.rhtml (当然,search.xml要删除)

xml 代码
 
  1. < OpenSearchDescription   xmlns = "http://a9.com/-/spec/opensearch/1.1/"   
  2.                        xmlns:moz = "http://www.mozilla.org/2006/browser/search/" >   
  3. < ShortName > Image Search <!---->ShortName >   
  4. < Description > Image Search <!---->Description >   
  5. < InputEncoding > UTF-8 <!---->InputEncoding >   
  6. < Image   height = "16"   width = "16"   type = "image/x-icon" > < %= @request.protocol + @request.host_with_port % > /images/image.ico <!---->Image >   
  7. < Url   type = "text/html"   method = "get"   template = "<%= url_for :only_path => false, :controller => 'images', :action => 'you_choose' %>" >   
  8.   < Param   name = "filename"   value = "{searchTerms}" />   
  9. <!---->Url >   
  10. < moz:SearchForm > < %= url_for  :only_path  = >  false,  :action  = >  'list',  :controller  = >  'images' % > <!---->moz:SearchForm >   
  11. < Url   type = "application/x-suggestions+json"   template = "<%= url_for :only_path => false, :action => 'suggest', :controller => 'images' %>?filename={searchTerms}" />   
  12. <!---->OpenSearchDescription >   


    layouts/images.rhtml 文件中的 link 也要修改。

xml 代码
 
  1. < link   rel = "search"   type = "application/opensearchdescription+xml"   title = "Search a Image"   href = "<%= url_for :only_path => false, :controller => 'images', :action => 'opensearch' %>"   >   
分享到:
评论
4 楼 seadog 2007-04-10  
先藏下看看
3 楼 eastviking 2007-03-21  
不用吧,这么简单的东西,人家提示个思路,下面的自己搞一下就好了
多动手才能学的精
2 楼 RobinWu 2007-03-21  
同意楼上的
1 楼 Cecily 2007-03-13  
先藏下看看 不妨把例子打个包一起放上来

相关推荐

    元标记:Ruby on Rails应用程序的搜索引擎优化(SEO)

    MetaTags:使您的Rails应用程序变得SEO友好的瑰宝 Ruby on Rails应用程序的搜索引擎优化(SEO)插件。 Ruby on Rails MetaTags master分支完全支持Ruby on Rails 5.1+,并针对所有主要的Rails发行版(最高6.1)...

    Ruby-Geocoder完整的Ruby地理编码解决方案

    例如,你可以在模型中添加`geocoded_by`和`acts_as_mappable`方法来启用这个功能。 总的来说,Ruby-Geocoder是Ruby开发者在构建地理位置相关应用时的一个强大工具,它提供了全面的功能和灵活的配置选项,使得处理...

    java开源包1

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包11

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包2

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包3

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    JAVA上百实例源码以及开源项目源代码

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    java开源包6

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包5

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包10

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包4

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包8

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    实用Linux命令行技巧

    - 创建了一个名为`unic`的别名,用于启动特定配置下的`unicorn_rails`服务。 4. **脚本编写**: - 示例:`10:53:56~/bin/vi repo-update` - 编写一个Shell脚本来批量更新多个仓库。 - 脚本内容: ```bash #...

    java开源包7

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包9

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包101

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    Java资源包01

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    library.io:开源发现服务

    每个存储库都有有关设置和添加新功能的更多详细文档,有关该存储库的信息,请参阅以下指南: 贡献者 许多出色的人为该项目做出了贡献,您可以在此处查看所有内容: : 发展历程 源代码托管在。 在上报告问题/功能...

Global site tag (gtag.js) - Google Analytics