6 votes

Meilleur moyen de détecter les utilisateurs mobiles dans Magento

Quelle est la meilleure façon de détecter si un utilisateur est un utilisateur mobile au niveau du code ?

L'administrateur peut définir des règles basées sur l'expression rationnelle pour détecter et changer de thème en fonction de l'agent de l'utilisateur, mais il semble que cette fonctionnalité soit "protégée" dans l'API et ne soit pas disponible sous la forme d'un ensemble de méthodes que tout développeur peut utiliser.

Je comprends que les développeurs et les concepteurs doivent organiser leurs fonctionnalités dans les dossiers de thèmes pour qu'elles soient disponibles/non disponibles, mais c'est une exigence assez difficile à satisfaire pour les fournisseurs d'extensions, car les règles de regex peuvent être définies de manière assez souple et l'administrateur n'a pas à préciser si un thème est destiné aux utilisateurs mobiles.

Peut-être que quelqu'un a déjà une bonne méthode pour détecter cela à partir du noyau (sans réimplémenter le matériel pour le protéger au lieu de le rendre public). core/design_package ) ?

16voto

quickshiftin Points 6379

Que pensez-vous de ça ? Ça a l'air de fonctionner plutôt bien pour moi.

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

Bien que je n'aie pas fait assez de recherches, peut-être que l'adaptateur wurfl est plus robuste, par ce fil .

5voto

Roman Points 264

Vous pouvez essayer de la manière suivante :

  • Créez une nouvelle boutique pour votre site Web avec votre propre vue de la boutique, configurée pour utiliser le pack de thèmes mobiles souhaité.
  • allez dans index.php et ajoutez-y du code pour vérifier si l'utilisateur actuel utilise un appareil mobile (cette question a déjà été posée). comment vérifier si la requête provient d'un mobile ou d'un ordinateur en php )
  • ajouter ce contrôle AVANT la ligne

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

  • puis utiliser la condition comme ceci

    if (is_mobile()) { Mage::run('mobile_store_code') ; } else { Mage::run($mageRunCode, $mageRunType) ; }

Tout comme la variante.

UPD : par exemple la méthode decet elle-même :

 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;
    }

Code tiré de http://www.manhunter.ru/webmaster/272_opredelenie_mobilnih_brauzerov_na_php.html

Ou celui-là

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;  
}  

Code tiré de http://snippy.ru/snippet/1864-Prostoy_sposob_opredelit_zahod_na_stranicu_cherez_mobilnyy_brauzer/

De nombreux exemples de ce type peuvent être trouvés avec Google ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X