2012-01-30 6 views
5

Quelle est la meilleure façon de détecter si l'utilisateur est un utilisateur mobile au niveau du code? Admin peut définir des règles basées sur regex pour détecter et changer de thème en fonction de l'agent utilisateur, mais il semble que cette fonctionnalité soit "protégée" dans api et ne soit pas disponible comme un ensemble de méthodes que chaque développeur peut utiliser. Je comprends que les devs et les concepteurs doivent organiser leur fonctionnalité dans les dossiers de thème pour être disponibles/indisponibles mais c'est une exigence plutôt difficile pour les fournisseurs d'extension car les règles regex peuvent être définies de manière assez vague et admin n'a pas à spécifier si un thème est destiné aux utilisateurs mobilesMeilleure façon de détecter les utilisateurs mobiles dans Magento

Alors peut-être que quelqu'un a déjà une bonne méthode pour ignorer cela à partir du noyau (sans implémenter de nouveau pour être public à la place de la protection qui est déjà disponible core/design_package)?

Répondre

5

Vous pouvez essayer la prochaine façon:

  • Créer un nouveau magasin pour votre site Web avec sa propre vue magasin qui configurent à utiliser package thème mobile désiré
  • aller à index.php et y ajouter un peu de code pour vérifier est l'utilisation de l'utilisateur actuel appareil mobile (cette question était déjà là how to check if the request came from mobile or computer in php)
  • ajouter cette vérification en ligne AVANT

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

  • puis utilisez cette condition comme

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

Comme variante.

UPD: par exemple la méthode de 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-ci

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/

Il beaucoup un tel exemple peut être trouvé avec Google;)

+0

cool :) la question est sur le contenu de is_mobile() pas ce qui l'entoure –

+0

merci pour la recherche +1 pour cela, Magento a similaire comparaison de regex construit déjà dans core/design_package (seulement protégé) juste se demandant s'il y a quelque chose d'autre que je n'ai pas encore trouvé ce que les gens utilisent pour cela –

14

Que pensez-vous de cela? Semble fonctionner plutôt bien pour moi.

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

Bien que je ne l'ai pas fait assez de recherches, peut-être l'adaptateur WURFL est plus robuste, par this thread.

+1

Ceci est une bonne réponse originale pour magento. –

Questions connexes