1. 程式人生 > >使用Thinkphp框架開發移動端介面(2)

使用Thinkphp框架開發移動端介面(2)

ThinkPHP的模板主題機制,如果只是在PC,只要需修改 DEFAULT_THEME (新版模板主題預設是空,表示不啟用模板主題功能)配置項就可以方便的實現多模板主題切換。
  但對於移動端和PC端,也許你會設計完全不同的主題風格,且針對不同的來路提供不同的渲染方式,其中一種比較流行的方法是“響應式設計”,但就本人經歷而言,要實現完全的“響應式設計”並不是那麼容易,且解決相容問題也是個難題,假設是大型站點,比如:淘寶、百度、拍拍這些,響應式設計肯定是滿足不了需求的,而是需要針對手機訪問使用者提供單獨的手機網站。

ThinkPHP 完全可以實現,而且相當簡單。和TPM的智慧模版切換引擎一樣,只要對來路進行判斷處理即可。

1. [程式碼]將 ismobile() 加入到{專案/Common/common.php}

function ismobile() { // 如果有HTTP_X_WAP_PROFILE則一定是移動裝置
if(isset ($_SERVER['HTTP_X_WAP_PROFILE'])) returntrue; //此條摘自TPM智慧切換模板引擎,適合TPM開發 if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT']) returntrue; //如果via資訊含有wap則一定是移動裝置,部分服務商會遮蔽該資訊 if(isset ($_SERVER['HTTP_VIA'])) //找不到為flase,否則為true returnstristr($_SERVER['HTTP_VIA'],'wap'
) ? true : false; //判斷手機發送的客戶端標誌,相容性有待提高 if(isset ($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords= array( 'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce'
,'palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile' ); //從HTTP_USER_AGENT中查詢手機瀏覽器的關鍵字 if(preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) { returntrue; } } //協議法,因為有可能不準確,放到最後判斷 if(isset ($_SERVER['HTTP_ACCEPT'])) { // 如果只支援wml並且不支援html那一定是移動裝置 // 如果支援wml和html但是wml在html之前則是移動裝置 if((strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'],'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'],'text/html')))) { returntrue; } } returnfalse; }

2. [程式碼]在{專案/Lib/}建立一個 CommonAction.php,如果你的專案已公共控制器,則無需建立,直接加在裡面即可。

Class CommonAction extends Action{ Publicfunction _initialize(){ //移動裝置瀏覽,則切換模板 if(ismobile()) { //設定預設預設主題為 Mobile C('DEFAULT_THEME','Mobile'); } //............你的更多程式碼....... } }