移动化我的Blog

感觉移动化这个词好别扭啊,我用这个词的意思是让我的Blog更适合用手机等移动设备阅读,用你的Android手机或iPhone访问看一下吧。

要将一个Rails程序mobilize是很简单的,我们开始吧

Controller需要一个before_filter

把下面的代码作为before_filter加入到一个合适的Controller中,合适的标准是什么呢?我也不太清楚了,或许你可以加在ApplicationController

def detect_browser
  if params[:format].blank?
    unless session.has_key? 'mobile'
      agent = request.headers["HTTP_USER_AGENT"].downcase
      session[:mobile] = agent.match(MOBILE_BROWSERS) ? 'true' : 'false'
    end
    params[:format] = 'mobile' if 'true' == session[:mobile]
  elsif 'mobile' == params[:format]
    session[:mobile] = 'true'
  elsif 'html' == params[:format]
    session[:mobile] = 'false'
  end
end

这个before_filter自然是用来检测User-Agent了,下面是google的一些移动设备

MOBILE_BROWSERS = ["android", "iphone", "ipod", "opera mini", "blackberry", "palm", "hiptop", "avantgo", "plucker", "xiino", "blazer", "elaine", "windows ce; ppc;", "windows ce; smartphone;", "windows ce; iemobile", "up.browser", "up.link", "mmp", "symbian", "smartphone", "midp", "wap", "vodafone", "o2", "pocket", "kindle", "mobile", "pda", "psp", "treo"].join('|')

注册一个mime type

config/initializers/mime_types.rb中加入下面一条

Mime::Type.register_alias "text/html", :mobile

然后就可以在你的Controller添加一个mobile response了

respond_to :html, :rss, :mobile

现在我们的Controller已经算是修改完毕了,这时当你用手机访问时Controller会为你寻找相应的Views。比如你访问博客首页http://abitno.me/blog,移动设备用户使用的layout将会是main.mobile.erb,普通用户则是用main.html.erb。

一份精简的Views

给移动设备访问,很多东西都是冗余的,最好是新建立一份独立的Views。

我们首先要一个mobile的layout,main.mobile.erb,跟普通的erb文件同样的写法,不过需要一个特殊的meta

<meta content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no" name="viewport" />

貌似也没有其他要做的了,当然一些CSS的修改还是要做的

部分内容来自这里Mobile enable your Ruby on Rails site for small screens

最后,用你的手机访问我的blog吧,我需要你!!!

另外,有很多人不喜欢我的blog背景,那你也可以在电脑上访问移动版本
http://abitno.me/blog.mobile

谢谢国家,谢谢大家的关心与支持~

8 COMMENTS >>LEAVE<<

  1. kfihihc

    学习了,嗯 ,好像我每次都是沙发啊,哦耶。

  2. ABitNo
    @kfihihc

    哇,果然是

    不过我发现上面的代码Bug多多--

  3. kfihihc

    rails是你特长,那bug就靠你了,呵呵。话说我blog好了,因为我之前设置了多个A记录,搞得解析不了,汗……现在应该正常了。

  4. ABitNo

    删除测试评论把我的回复也删除了--

  5. tmdab123

    我发现你少了UCWEB

  6. Jason Lee

    就是要多写一个模板麻烦了些,加新功能改进也不是很方便,一直在现有没有更方便的方式实现.
    我现在博客桌面版跟手机用同一个模板,不过我现在是页面布局比较简单

  7. ABitNo
    @Jason Lee

    我觉得这样挺好的,把东西都分开不会一不小心就影响了其他地方。

    特别是在调整电脑界面时很容易就忘了手机方面,这样虽然麻烦了点,倒也省心了。

  8. kollocc

    http://metautonomo.us/2011/01/05/mobile-devices-and-rails-maintaining-your-sanity/
    这里这个方案就可以不用写两个模板.

LEAVE A RESPONSE >>CANCEL<<

loader