Magento2: cách tốt nhất để phát hiện thiết bị di động là gì?


9

Tôi đã sử dụng mã dưới đây để phát hiện điện thoại di động trong magento1.

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

Tôi không chắc chắn nếu có một cái gì đó có sẵn cho Magento2. Bất cứ ai đã sử dụng một cái gì đó như thế này trong magento2?


Để phát hiện các thiết bị khách, chúng tôi có một tiện ích mở rộng tại đây github.com/EaDesgin/magento2-mobiledetect
Krishna ijjada

Hãy cho tôi biết nếu bạn có bất kỳ vấn đề?
Vishwas Soni

Bạn nên phê duyệt câu trả lời hoặc yêu cầu các truy vấn của bạn để giúp các nhà phát triển khác tìm giải pháp phù hợp.
Vishwas Soni

@VishwasSoni Tôi đã thử bạn giải pháp cho nó trang trống. không có lỗi Đó là lý do tại sao tôi chưa được chấp nhận.
Kul

@Kul Gỡ lỗi sự cố và quay lại với các lỗi bạn gặp phải. Một cộng đồng sẽ giúp bạn.
Vishwas Soni

Câu trả lời:


8

Cách tốt nhất là phát hiện một thiết bị di động là

//Identifying if user is on mobile browser or not
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))) {
    $browserStatus = 'Mobile';
}

Tôi đã sử dụng điều này trong nhiều trang web và làm việc hoàn hảo.


Làm việc cho tôi là tốt!
Kul

7

Bạn có thể sử dụng cùng một lớp trong Magento2.

protected $httpHeader;

protected $mobileAgent;

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

public function isMobile(){
  $userAgent = $this->httpHeader->getHttpUserAgent();

  return $this->mobileAgent->match($userAgent, $_SERVER); //the code which you want.
}

Bắt ngoại lệ # 0 (Ngoại lệ): Lưu ý: Chỉ mục không xác định: http_user_agent trong /var/www/Magento2/vendor/magento/zendframework1/l Library / Zend / Http / UserAgent / Features / Ad Module / Browscap xin hãy giúp tôi
BK

1
@kranthi bạn có thể phải xây dựng plugin của mình sau khi tiêm DIphp bin\magento setup:di:compile
Sumit Kumar

@SumitKumar chạy lệnh nhưng không sử dụng
BK

Có vẻ như trình duyệt của bạn không được đặt http_user_agent. Hãy thử sử dụng nếu điều kiện như thế này: stackoverflow.com/questions/14130830/ trên
Vishwas Soni

2

Bạn có thể sử dụng mã dưới đây

   protected $httpHeader;

   public function __construct(
    \Magento\Framework\Model\Context $context,
    \Magento\Framework\HTTP\Header $httpHeader,
    )
    {
         $this->httpHeader = $httpHeader;
         parent::__construct($context);
    }
    public function execute(){
      $userAgent = $this->httpHeader->getHttpUserAgent();
    }

2

Bạn sử dụng Thư viện này để phát hiện di động

Liên kết

tạo mô-đun tùy chỉnh thêm thư viện trong mô-đun và tạo trợ giúp và đưa chức năng này vào sử dụng toàn cầu.

  public function isMobile() 
  {
     return $this->mobileDetector->isMobile() || $this->mobileDetector->isTablet();
  } 

Thêm mobileDetector trong hàm tạo của bạn vào thư viện.


2

Bạn chỉ cần tiêm một lớp "\ Magento \ Framework \ HTTP \ Header", bởi vì "\ Zend_Http_UserAgent_Mobile :: match" là một phương thức tĩnh, vì vậy cách này sẽ hoạt động:

/**
 * @var \Magento\Framework\HTTP\Header
 */
protected $httpHeader;

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

/**
 * @return bool
 */
public function isMobile()
{
    $userAgent = $this->httpHeader->getHttpUserAgent();
    return \Zend_Http_UserAgent_Mobile::match($userAgent, $_SERVER);
}

1

Tôi đang chạy Magento 2.3.2

Tôi thấy rằng cách dễ nhất là thêm "Mobile_Detect.php" vào thư mục "magento_path / lib / Internal". Sau đó gọi nó vào tệp mẫu .phtml của tôi bằng cách sử dụng như sau:

<?php 
include(BP.'/lib/internal/Mobile_Detect.php');
$detect = new Mobile_Detect();
if( $detect->isMobile() && !$detect->isTablet() ){
    echo "Is Mobile";
} else{
    echo "Is Desktop";
}
?>

Hy vọng điều này sẽ giúp được ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.