2011年11月15日 星期二

在RoR架構上自動導入手機版網頁

行動裝置的成長趨勢有目共睹,針對螢幕較小的行動裝置設計版型也因而變成重要學問。

一般做行動裝置版的網頁有三種方法:
1. 直接做兩套系統,偵測到user是用行動裝置連上網頁時,自動轉址到行動裝置系統的url
2. 同一套系統,但提供不同的url和html,行動裝置登入時轉址到該url。
3. 同一套系統,但做兩套css,使用者用行動裝置進入時,套用行動裝置版的css


這篇文章針對RoR架構,討論第二種方法的實做方式。

一、
設計行動版網頁url時,在網域前加上「m」(mobile)算是很常見的習慣,例如m.facebook.com
但使用免費的平台,例如heroku,不太可能這樣做
所以這邊設定的網址是在主網址後加上m,例如ptttranspost.heroku.com/m

假設user用電腦登入時的頁面,對應的controller是「home」,那我們就在app/views/home下新增"m.html.erb"。
接著,請到config/routes.rb 新增路徑
match 'm' => 'home#m'

二、
編輯app/controllers/home_controller.rb
class HomeController < ApplicationController
        layout 'application', :except =>"m" #avoid applying layout config to m.html.erb 
    def index
        platform=request.env["HTTP_USER_AGENT"] #get user agent to check users' platform
        if /android/i =~ platform or /iPhone/i =~ platform #if users' platforms are phones, redirect it
            redirect_to m_path
        end 
    end 

    def m
    end 
end
第二行的用意是防止layouts/application.html.erb 裡的設定干擾行動版網頁
假如也要將layouts的設定套用到行動版網頁,則不用加上這行,甚至也不用做第一步驟和新增一個「m」action,因為上述兩動作都是為了避免m.html.erb被layouts影響而做。 不考慮會被layouts影響的話,第六行直接「render "m.html.erb"」即可

ps.應該也可以針對行動版網頁設計layouts,不過我用不到,所以還沒研究
要這樣用的話,可以參考這個語法:
layout false, :only => :your_action_name
三、
編輯m.html.erb,將其編輯成想要的版型
剩下的就依此類推!

研究了好一陣子,希望能幫上忙

沒有留言:

張貼留言