2012-01-30 14 views
5

Jaki jest najlepszy sposób na wykrycie, czy użytkownik jest użytkownikiem mobilnym na poziomie kodu?Najlepszy sposób na wykrycie użytkowników mobilnych w Magento

Administrator może ustawić reguły oparte na regexie w celu wykrycia i zmiany motywów na podstawie agenta użytkownika, ale wygląda na to, że ta funkcja jest "chroniona" w interfejsie API i nie jest dostępna jako zestaw metod, z których może korzystać każdy programista.

Rozumiem, że twórcy i projektanci powinni rozmieścić ich funkcje w folderach tematycznych, aby były dostępne/niedostępne, ale jest to raczej trudne wymaganie dla dostawców rozszerzeń, ponieważ reguły regex mogą być nieco luźno zdefiniowane, a administrator nie musi określać, czy temat jest przeznaczony dla użytkowników mobilnych

Więc może ktoś ma dobrą metodę, aby to wyłowić z rdzenia (bez ponownego wprowadzania rzeczy do publicznej ochrony zamiast chronionej, która jest już dostępna core/design_package)?

Odpowiedz

5

Można spróbować następnym sposób:

  • Utwórz nowy sklep na swojej stronie internetowej z własnym zdaniem zapisywać, które skonfigurować do korzystania żądany telefon pakiet tematyczny
  • przejść do index.php i dodać tam jakiś kod do sprawdzenia jest Obecne wykorzystanie użytkownik urządzenia mobilne (kwestia ta była już tam how to check if the request came from mobile or computer in php)
  • dodać to sprawdzić przed linia

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

  • następnie użyć warunku jak ten

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

Tak samo jak wariant.

UPD: dla metody to przykład DECET samodzielne:

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

Kodeksu pobranej od http://www.manhunter.ru/webmaster/272_opredelenie_mobilnih_brauzerov_na_php.html

Lub ten

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

Kod pobranej od http://snippy.ru/snippet/1864-Prostoy_sposob_opredelit_zahod_na_stranicu_cherez_mobilnyy_brauzer/

Istnieje wiele taki przykład można znaleźć w Google;)

+0

fajne :) pytanie dotyczy zawartości is_mobile(), a nie tego, co się wokół niego znajduje –

+0

dzięki za badania +1 za to, Magento ma podobne porównanie regex wbudowane już w core/design_package (tylko chronione) tylko zastanawiasz się, czy jest coś jeszcze, czego nie znalazłem jeszcze, co ludzie używają do tego –

14

Co powiesz na to? Wydaje mi się, że działa mi całkiem dobrze.

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

Choć nie zrobili wystarczająco dużo badań, może adapter wurfl jest bardziej wytrzymała, za this thread.

+1

To jest oryginalna dobra odpowiedź dla magento. –

Powiązane problemy