【问题标题】:Best way to detect mobile users in Magento在 Magento 中检测移动用户的最佳方法
【发布时间】:2018-06-13 23:20:58
【问题描述】:

在代码级别检测用户是否是移动用户的最佳方法是什么?

管理员可以设置基于正则表达式的规则,以根据用户代理检测和切换主题,但似乎此功能在 api 中受到“保护”,并且不能作为每个开发人员都可以使用的一组方法。

我知道开发人员和设计人员应该将他们的功能安排在主题文件夹中以使其可用/不可用,但这对于扩展提供者来说是相当硬的要求,因为正则表达式规则的定义可能有些松散,并且管理员不必指定主题是否是面向移动用户

所以也许有人已经有一个很好的方法可以从核心中嗅出它(无需再次实现公开的东西,而是保护已经可用的core/design_package)?

【问题讨论】:

    标签: php magento


    【解决方案1】:

    这个怎么样?对我来说似乎工作得很好。

    $isMobile = Zend_Http_UserAgent_Mobile::match(
        Mage::helper('core/http')->getHttpUserAgent(),
        $_SERVER
    );
    

    虽然我没有做足够的研究,但也许 wurfl 适配器更健壮,根据this thread

    【讨论】:

      【解决方案2】:

      你可以试试下一个方法:

      • 使用自己的商店视图为您的网站创建新商店,并配置为使用所需的移动主题包
      • 转到 index.php 并在其中添加一些代码以检查当前用户是否使用移动设备(这个问题已经存在 how to check if the request came from mobile or computer in php
      • 在行前添加此检查

      Mage::run($mageRunCode, $mageRunType);

      • 然后使用这样的条件

        如果 (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/

      在谷歌上可以找到很多这样的例子;)

      【讨论】:

      • cool :) 问题是关于 is_mobile() 的内容而不是它周围的内容
      • 感谢您的研究 +1,Magento 已经在 core/design_package(仅受保护)中内置了类似的正则表达式比较,只是想知道是否还有其他我还没有找到的东西人们正在使用什么这个
      猜你喜欢
      • 2015-12-07
      • 2010-12-29
      • 2019-01-26
      • 2014-12-26
      • 2015-12-09
      • 2013-06-09
      • 2011-02-17
      相关资源
      最近更新 更多