在代码级别检测用户是否为移动用户的最佳方法是什么?
管理员可以设置基于正则表达式的规则来检测和切换基于用户代理的主题,但这项功能似乎在api中受到"保护",不能作为每个开发人员都可以使用的一组方法。
我知道开发人员和设计人员应该在主题文件夹中安排他们的功能,使其可用/不可用,但这对扩展提供商来说是一个相当困难的要求,因为正则表达式规则的定义可能有些松散,管理员不必指定主题是否适用于移动用户
所以,也许有人已经有了一个很好的方法来从核心中嗅出这一点(而不需要再次实现公共的东西,而是保护已经可用的core/design_package
)?
这个怎么样?似乎对我来说效果不错。
$isMobile = Zend_Http_UserAgent_Mobile::match(
Mage::helper('core/http')->getHttpUserAgent(),
$_SERVER
);
虽然我还没有做足够的研究,但根据这个线程,也许wurfl适配器更健壮。
您可以尝试下一种方式:
- 使用自己的商店视图为您的网站创建新的商店,该视图配置为使用所需的移动主题包
- 转到index.php并添加一些代码来检查当前用户是否使用移动设备(这个问题已经存在,如何在php中检查请求是否来自移动设备或计算机)
- 添加此支票BEFORE行
Mage::run($mageRunCode, $mageRunType);
-
然后使用类似的条件
if(is_mobile()){法师::run('mobile_store_code');}其他{法师::run($mageRunCode,$mageRunType);}
就像变体一样。
UPD:例如欺骗方法本身:
function is_mobile() {
$user_agent=strtolower(getenv('HTTP_USER_AGENT'));
$accept=strtolower(getenv('HTTP_ACCEPT'));
if ((strpos($accept,'text/vnd.wap.wml')!==false) ||
(strpos($accept,'application/vnd.wap.xhtml+xml')!==false)) {
return 1;
}
if (isset($_SERVER['HTTP_X_WAP_PROFILE']) ||
isset($_SERVER['HTTP_PROFILE'])) {
return 2;
}
return 0;
}
代码取自http://www.manhunter.ru/webmaster/272_opredelenie_mobilnih_brauzerov_na_php.html
或者这个
function isMobile()
{
$regex_match = "/(nokia|iphone|android|motorola|^mot'-|softbank|foma|docomo|kddi|up'.browser|up'.link|"
. "htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|"
. "blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam'-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|"
. "symbian|smartphone|mmp|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte'-|longcos|pantech|gionee|^sie'-|portalmmm|"
. "jig's browser|hiptop|^ucweb|^benq|haier|^lct|opera's*mobi|opera'*mini|320x320|240x320|176x220"
. ")/i";
if (preg_match($regex_match, strtolower($_SERVER['HTTP_USER_AGENT']))) {
return TRUE;
}
if ((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') > 0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))) {
return TRUE;
}
$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'], 0, 4));
$mobile_agents = array(
'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
'wapr','webc','winw','winw','xda ','xda-');
if (in_array($mobile_ua,$mobile_agents)) {
return TRUE;
}
if (isset($_SERVER['ALL_HTTP']) && strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini') > 0) {
return TRUE;
}
return FALSE;
}
代码取自http://snippy.ru/snippet/1864-Prostoy_sposob_opredelit_zahod_na_stranicu_cherez_mobilnyy_brauzer/
在谷歌上可以找到很多这样的例子;)