0

I can't find the correct code to check if my Magento 2 site is visited by Mobile. These are the two codes that I tried in the header.phtml file in my custom theme but they don't work:

$userAgent = $this->getRequest()->getHeader('useragent');
$server = $this->getRequest()->getServer();
$isMobileDevice = \Zend_Http_UserAgent_Mobile::match($userAgent, $server);
if($isMobileDevice) {
    echo 'is mobile';
}



if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$_SERVER['HTTP_USER_AGENT'])||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($_SERVER['HTTP_USER_AGENT'],0,4))) {
    echo 'questo è mobile';
}

How can i do? Thanks

2
  • Check this post if it helps! webcreta.com/… Commented May 28, 2020 at 19:22
  • Thanks man, I had read this post but I would not want to create additional functions if it were possible. Any alternative?
    – Jackom
    Commented May 29, 2020 at 7:13

1 Answer 1

0

Try injecting the class \Magento\Framework\HTTP\Header to the constructor and used it to get user agent to match in Zend_Http_UserAgent_Mobile.

protected $httpHeader;
.... 

public function __construct(
    \Magento\Framework\HTTP\Header $httpHeader
) {
    $this->httpHeader = $httpHeader;
}

public function isMobileDevice()
{
    $userAgent = $this->httpHeader->getHttpUserAgent();
    return \Zend_Http_UserAgent_Mobile::match($userAgent, $_SERVER);
}

Use the function:

if($this->isMobileDevice()) {
    echo 'is mobile';
}

OR

Try below code in your phtml file:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$userAgent = $objectManager->get('Magento\Framework\HTTP\Header')->getHttpUserAgent();
$isMobileDevice = \Zend_Http_UserAgent_Mobile::match($userAgent, $_SERVER);

if($isMobileDevice) {
    echo 'is mobile';
}

Note: Direct use of objectManager is not recommended so please find the alternate way to create the instance of httpHeader if the above code works!

I hope this helps!

5
  • Hi, thanks for the reply. Can i include this entire code in my header.phtml file without create public functions? Thanks
    – Jackom
    Commented May 29, 2020 at 17:21
  • @Jackom Please check the updated answer if helps. Commented May 29, 2020 at 18:02
  • @Jackom Does the code work for you? Commented May 30, 2020 at 13:19
  • Man, i tried your code but the word "is mobile" I see it for both desktop and mobile ...
    – Jackom
    Commented Jun 1, 2020 at 10:25
  • P.S. I tried last your code not the first.
    – Jackom
    Commented Jun 1, 2020 at 10:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.