使用Rails开发支持WAP/WML的应用

先复制下在网上能找搜索到的资料.我测试过,没成功.于是 结合搜索的资料   在本文的<2>中 我自己写了一下..

 

Rails在WEB开发中独树一帜,取得相当大的成功,但是其内核中尚未支持WML,于是查找了一些资料,如果你使用Rails开发的系统向添加WAP支持,这或许对你有用。

总的来看,有两个方式来实现对WML的支持,单独支持和整合支持,下面详细的说。

一、按照一般方式支持

这个方式和做PC WEB方式是一样的,有个单独的controller或者action,指定特有的layout和页面模板,而这些模板中采用WML语言编写,在请求到来的时候,按照URL中特有的特征字符(比如二级域名)或者Http Head中的标识转向Wap的action,进而显示。详细的步骤基本上是这样的:

1、在app/controllers/application.rb中增加对WAP格式输出的支持

Ruby代码
  1. before_filter :set_wap_content_type:only => :wap  
  2.   
  3. def set_wap_content_type  
  4.   @headers["Content-Type"] = “text/vnd.wap.wml; charset=iso-8859-1′  
  5. end  

2、添加一个WAP的全局布局模板app/views/layouts/wap.rhtm

XML/HTML代码
  1. <?xml version=”1.0′?>  
  2. <!DOCTYPE wml PUBLIC “-//WAPFORUM//DTD WML 1.1//EN” “http://www.wapforum.org/DTD/wml_1.1.xml”>  
  3. <wml>  
  4. <card title=”<%= @title %>>  
  5. <p align=”center”>  
  6. <%= @content_for_layout %>  
  7. </p>  
  8. </card>  
  9. </wml>  

3、在我的controller中(index)中增加一个action用来响应WAP请求。

Ruby代码
  1. def wap  
  2.   @title = "San Francisco Sailing Weather"  
  3.   render(:layout => "wml")  
  4. end  

4、添加相应的view模板app/views/index/wap.rhtml

XML/HTML代码
  1. <%= link_to 'NOAA Marine Forecast', { :controller => '/marine/forecast', :action => 'wap' } %><br/>  
  2. <%= link_to 'Wind Readings', { :controller => '/marine/wind', :action => 'wap' } %><br/>  
  3. <%= link_to 'Current Predictions', { :controller => '/marine/tide', :action => 'wap' } %>  

 

二、使用Rails2支持的多模板类型支持

在Rails2以后,Rails支持多种格式的输出,比如Html,RSS,JS等,当然你还可以定制自己的格式,比如我们这里说的WML,Iphone等,使用起来更简单、自然。

1、添加MIME格式支持

在config/environment.rb中增加MIME的格式支持,方式如下:

Ruby代码
  1. Mime::Type.register "text/vnd.wap.wml":wml  
2、判断请求类型
Ruby代码
  1. # application.rb  
  2. before_filter :adjust_format_for_beta  
  3.   
  4. ...  
  5.   
  6. def adjust_format_for_beta  
  7.   request.format = :beta if beta_request?   
  8. end  
  9.   
  10. def beta_request?  
  11.   return (request.subdomains.first == "beta" || params[:format] == "beta")  
  12. end  
3、添加相应的view代码
比较简单,就是写XML或者WML模板 show.wml.erb
XML/HTML代码
  1. xml.instruct! :xml, :version => "1.0"  
  2. xml.wml "xml:lang" => "en-gb" do  
  3.   xml.card :title => "My title here" do  
  4.     xml.p "Something interesting here"  
  5.     xml.p "Something else interesting here."  
  6.   end  
  7. end  
4、添加输出类型支持
Ruby代码
  1. def index  
  2.   respond_to do |format|  
  3.     format.html  
  4.     format.wml  
  5.   end  
  6. end  
以上两中方式,我个人更加喜欢Rails2的多模板支持模式,更加自然和清晰。

你可能感兴趣的:(Rails,WAP/WML)