如果我有一個專爲桌面Web使用而設計的網站,但我想用面向移動設計創建一個版本,那麼我將如何去顯示這個內容,而不用維護具有非常類似邏輯的兩個版本的頁面。基於PHP的網站如何提供不同版本的網站?
我不能只爲移動版本使用不同的CSS,因爲我打算提供不同的HTML結構,是否有更好的方法,而不僅僅是在每個頁面中使用大量if語句?
如果我有一個專爲桌面Web使用而設計的網站,但我想用面向移動設計創建一個版本,那麼我將如何去顯示這個內容,而不用維護具有非常類似邏輯的兩個版本的頁面。基於PHP的網站如何提供不同版本的網站?
我不能只爲移動版本使用不同的CSS,因爲我打算提供不同的HTML結構,是否有更好的方法,而不僅僅是在每個頁面中使用大量if語句?
一個想法是實現像Smarty或Zend View這樣的模板系統(這裏有很多)。在您的主站點上,您的控制器代碼將爲您執行所有邏輯併爲模板變量賦值。然後根據正在使用哪個版本(桌面/移動設備)查看您的網站,加載適當的模板文件。這些可能有非常不同的HTML/CSS規則和結構,但在渲染視圖之前仍然使用相同的PHP邏輯。
有沒有比在每個頁面中使用大量if語句更好的方法?
是的,有一個更好的方法。不幸的是,如果你在設計你的網站時考慮到這一點會容易得多。你可以做的是使用模板引擎來保持你的PHP代碼和實際內容完全分離。所以,如果你想改變/添加一些新的客戶端頁面,這將是非常簡單的。你只需要添加東西到你的模板中。您還可以根據用戶的用戶代理字符串(其中包含操作系統信息)選擇要加載的模板。 PHP本身只負責從數據庫/文件/無論何處獲取動態數據獲取數據。
看看那裏有很多template engines for PHP。
我已使用類似以下示例的代碼來確定用戶是否可以重定向到移動版本的網站。該網站使用相同的模型和控制器文件,但使用不同的視圖文件。
if (preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android)/i', strtolower($_SERVER['HTTP_USER_AGENT']))
or strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') > 0
or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))
)
{
header('location: /m/index.php');
exit();
}
您將有兩個版本的網站,一個用於桌面,另一個用於移動設備。然後取決於$_SERVER['HTTP_USER_AGENT']
你會重定向一個用戶。
例如:
<?php
// Let's define a function to make it easier to read
function is_mobile(){
$list = array('Android', 'Iphone'); // Add more yourself
foreach ($mobile as $agent) {
if (stripos($agent, $_SERVER['HTTP_USER_AGENT']) {
// Looks like mobile
return true;
}
}
// Assuming desktop by default
return false;
}
// Then before rendering a template, you'd it approach like this:
if (is_mobile()) {
require 'mobile.php';
} else {
require 'desktop.php';
}
,如果你將需要兩個版本的同一個模型,它是更好地加載它if語句的。 –