在Sinatra中支持手机WAP访问

[sinatra] [ruby] [wap]

由于我的手机浏览器超烂,所以很少拿它上网。日前试了试访问我的网站,竟然把“节省”显示成“节剩”,真让人哭笑不得。昨天,给老婆买了个AnyCall,上网好用多了,但是在加载Google JS代码时老出错。索性,写了个Wap版的。

本打算专门用个域名m.7ge.cn,后来觉得没必要,还是动态检测一下比较好,如果是手机,就用WAP的Layout。

由于手机型号、版本及运营商的差别,检测起来也不是那么简单,参考了判断手机上网接入方法一文,暂时只检测HTTP_USER_AGENT和HTTP_VIA。

before do if request.user_agent.nil? || request.env['HTTP_VIA'] =~ /WAP/ @is_wap = true end end

get '/' do posts = Post.reverse_order(:created_at).limit(10)

if @is_wap erb :index_wap, :locals => {:posts => posts}, :layout => :layout_wap else comments = Comment.reverse_order(:created_at).limit(10) erb :index, :locals => { :posts => posts, :comments => comments }, :layout => false end end

需要说明,layout参数一定需要是一个Hash(如上面的:layout_wap),否则不能正确显示。这种方法虽然不是最好的,但考虑改起来最简单,还是这样做了。WAP版的Layout如下:

<%= Blog.title %>

<%= yield %>

当然,我没有把所有页面都加上Wap支持,现在,就拿手机访问 7ge.cn 试试吧?

七歌
微信扫一扫