让网站在不同于域名下出现不一样的网站模板,这样就能实现电脑站域名和手机站域名访问网站的时候展现出不同的页面来。
我们这里我们以smarty引擎为例,贴出判断不同域名显示不同模板的代码思路:
(1)建立两套模板,例如电脑的是yelangseo,手机的就设置成yelangseo_m,然后里边的模板命名也要完全一致。
(2)用以下代码来区分域名并且切换到不同的模板目录中。
$web_pc="";
$web_m="";
$host=$_SERVER['HTTP_HOST'];
if($host==$web_m){
$TEMPLATES_DIR=$TEMPLATES_DIR.'_m';
}
(3)不同的浏览设备访问时进行跳转。比如电脑访问手机站域名时要跳转,手机访问电脑站域名时要跳转。我们这里只做了首页跳转,如果需要内页也跳转,可以根据这个来拓展。
if($yys->isMobile()&&($host!=$web_m)){
Header("Location:http://".$web_m.'/');
exit();
}elseif((!$yys->isMobile())&&($host==$web_m)){
Header("Location:http://".$web_pc.'/');
exit();
}
其中,$yys->isMobile()来源自以下类函数:
function isMobile()
{
// 判断 iphone 和 ipad
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (strpos($userAgent, 'iPhone') || strpos($userAgent, 'iPad') || strpos($userAgent, 'iPod') || strpos($userAgent, 'iOS')) {
return true;
}
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
return true;
}
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset($_SERVER['HTTP_VIA'])) {
//找不到为flase,否则为true
return stristr($_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']))) {
return true;
}
}
//协议法,因为有可能不准确,放到最后判断
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'))) {
return true;
}
}
return false;
}