Magento2: Was ist der beste Weg, um mobile Geräte zu erkennen?

9

Ich habe den folgenden Code verwendet, um Mobiltelefone in Magento1 zu erkennen.

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

Ich bin mir nicht sicher, ob auch für Magento2 etwas verfügbar ist. Hat jemand so etwas in magento2 verwendet?

Kul
quelle
Um die Client-Geräte zu erkennen, haben wir hier eine Erweiterung: github.com/EaDesgin/magento2-mobiledetect
Krishna ijjada
Lassen Sie mich wissen, wenn Sie ein Problem haben?
Vishwas Soni
Sie sollten die Antwort genehmigen oder Ihre Fragen stellen, um anderen Entwicklern zu helfen, die richtigen Lösungen zu finden.
Vishwas Soni
@VishwasSoni Ich habe versucht, Sie Lösung es gibt mir leere Seite. ohne Fehler. Deshalb habe ich noch nicht akzeptiert.
Kul
@ Kul Debuggen Sie das Problem und kam mit den Fehlern zurück, die Sie erhalten. Eine Community wird Ihnen helfen.
Vishwas Soni

Antworten:

8

Der beste Weg ist, ein mobiles Gerät zu erkennen

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

Ich habe dies auf vielen Websites verwendet und arbeite perfekt.

Akgola
quelle
Hat auch für mich gearbeitet!
Kul
7

Sie können dieselbe Klasse in Magento2 verwenden.

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.
}
Vishwas Soni
quelle
Ausnahme Nr. 0 (Ausnahme): Hinweis: Undefinierter Index: http_user_agent in /var/www/Magento2/vendor/magento/zendframework1/library/Zend/Http/UserAgent/Features/Adapter/Browscap.php in Zeile 69 Ausnahme ... Bitte helfen Sie mir
BK
1
@kranthi müssen Sie möglicherweise Ihr Plugin nach DI-Injektion erstellenphp bin\magento setup:di:compile
Sumit Kumar
@ SumitKumar lief Befehl, aber keine Verwendung
BK
Es scheint, dass Ihr Browser nicht auf http_user_agent eingestellt ist. Versuchen Sie zu verwenden, wenn Bedingung wie diese: stackoverflow.com/questions/14130830/…
Vishwas Soni
2

Sie können den folgenden Code verwenden

   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();
    }
Dhaval Solanki
quelle
2

Sie verwenden diese Bibliothek für Mobile Detect

Verknüpfung

Benutzerdefiniertes Modul erstellen Bibliothek im Modul hinzufügen und Helfer erstellen und diese Funktion global nutzen.

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

Fügen Sie mobileDetector in Ihren Konstruktor ein, um die Bibliothek zu injizieren.

Pratik
quelle
2

Sie müssen nur eine Klasse "\ Magento \ Framework \ HTTP \ Header" einfügen, da "\ Zend_Http_UserAgent_Mobile :: match" eine statische Methode ist. Dies funktioniert also:

/**
 * @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);
}
schreien
quelle
1

Ich verwende Magento 2.3.2

Ich fand, dass der einfachste Weg ist, "Mobile_Detect.php" zum Ordner "magento_path / lib / internal" hinzuzufügen . Rufen Sie es dann wie folgt in meine .phtml-Vorlagendatei auf:

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

Hoffe das hilft jemandem.

Rupi
quelle