Wie erkenne ich einen mobilen Browser mit PHP in Inhalten?

9

Bei Verwendung von Drupal 7.14 mit aktiviertem PHP-Filter habe ich Folgendes in einem Inhaltstyp für eine Basisseite:

<?php if ($is_mobile == TRUE):?>
<div class="fb-like-box" data-href="http://www.facebook.com/a page" data-width="710" data-height="600" data-show-faces="false" data-border-color="#73AA4B" data-stream="true" data-header="false"></div>
<?php else: ?>
<div class="fb-like-box" data-href="http://www.facebook.com/a page" data-width="900" data-height="600" data-show-faces="false" data-border-color="#73AA4B" data-stream="true" data-header="false"></div>
<?php endif; ?>

Ich erhalte die Fehlermeldung:

Hinweis: Undefinierte Variable: is_mobile in eval () (Zeile 1 von D: \ sites \ modules \ php \ php.module (80): eval () 'd code).

Ich verstehe irgendwie - ich versuche, eine Variable aus dem Drupal-System zu holen, aber gibt es eine Möglichkeit, dies zu tun? Vielleicht mit Tokens?

Andy_D
quelle
Um mobile Browser zu erkennen, müssen Sie den Benutzeragenten überprüfen und dann Ihre Logik für verschiedene Geräte schreiben oder Contrib-Module verwenden, wie von MPD vorgeschlagen.
GoodSp33d

Antworten:

5

Die mobile Erkennung ist nicht in Drupal oder die beliebtesten Themen integriert (ich denke jedoch, dass Adaptive Theme dies tut). Dazu müssen Sie ein Contrib-Modul installieren. Drei Optionen sind Browscap , Mobile Tools und Mobile Detect . Wohin Sie von hier aus gehen, hängt davon ab, welches Modul Sie verwenden.

mpdonadio
quelle
Ich verwende tatsächlich das adaptive Thema, kann aber keinen offensichtlichen Weg finden, mich mit etwas wie Browscap daran zu binden. Na ja - danke für all das Feedback!
Andy_D
Ziemlich sicher, dass Sie nur Browscap installiert haben und die richtigen Einstellungen aktivieren müssen. AT unterstützt möglicherweise in Zukunft auch Mobile Detect.
mpdonadio
$is_mobileEs scheint, als stamme es aus dem Mobile Detect-Modul, das MPD erwähnt hat. Wenn Sie sich die Projektseite für dieses Modul ansehen, benötigen Sie anscheinend auch die Mobile_Detect-Bibliothek. Hast du das installiert?
Chapabu
1
@Chapabu, $is_mobilewird nicht direkt von Mobile Detect bereitgestellt (ich bin Modulautor ). AT bietet dies sofort an, wenn das Browscap-Modul installiert / aktiviert ist.
mpdonadio
@MPD ha ... das ist peinlich ;-) Ich habe gerade den Rest dieses Abschnitts richtig auf der Projektseite gelesen und ja ..... * hängt Kopf in Schande *
Chapabu
3

Ich habe ein sehr einfaches Modul geschrieben , das mobile Benutzeragenten erkennt und eine entsprechende globale Variable festlegt, auf die Sie dann in Ihrer Vorlage zugreifen können.

function MYMODULE_init() {
  $GLOBALS['is_mobile'] = _MYMODULE();
}

function _MYMODULE() {
  // if no user agent is set
  if (!isset($_SERVER['HTTP_USER_AGENT'])) {
    $is_mobile = FALSE;
  } else {
    /** 
     *  check http://detectmobilebrowsers.com for updates
     */
    $is_mobile = (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|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))) ? TRUE : FALSE;
  }
  return $is_mobile;
}

In Ihrer Vorlage würden Sie sie dann folgendermaßen verwenden:

<?php if ($GLOBALS['is_mobile'] == TRUE): ?>
<div class="fb-like-box" data-href="http://www.facebook.com/a page" data-width="710" data-height="600" data-show-faces="false" data-border-color="#73AA4B" data-stream="true" data-header="false"></div>
<?php else: ?>
<div class="fb-like-box" data-href="http://www.facebook.com/a page" data-width="900" data-height="600" data-show-faces="false" data-border-color="#73AA4B" data-stream="true" data-header="false"></div>
<?php endif; ?>
Leymannx
quelle
2

Sie können versuchen, mithilfe des Theme Key- Moduls nach dem mobilen Gerät zu suchen .
Es bietet Flexibilität zum Ändern des Themas nicht nur basierend auf dem Gerätetyp, sondern kann auch verschiedene Teile der Site basierend auf unterschiedlichen Bedingungen thematisieren.
Hier ist ein Link zu einem einfachen Tutorial mit themekey.

Wenn Sie gerade mit dem Entwerfen der Website begonnen haben, empfehlen wir Ihnen, das Omega- Design für die Entwicklung zu verwenden, da Sie das Layout ändern und darauf reagieren können (je nach Bildschirmgröße / Auflösung). Es unterstützt auch HTML5.
Es kann gut mit dem Omega Tools- Modul kombiniert werden, um ein Omega-Unterthema über die Benutzeroberfläche zu erstellen.

AjitS
quelle
Dies ist eine gut entwickelte Seite, die leider das Adaptive Theme verwendet. Wir befinden uns in der geräteübergreifenden Überprüfungsphase und anstatt große Codestücke zu wiederholen, suche ich nach Möglichkeiten, das zu nutzen, was wir haben. Danke für die Rückmeldung.
Andy_D
2
  1. In template.php geben Sie diesen Code ein

    function mytheme_preprocess_node(&$variables){
    
      $useragent=$_SERVER['HTTP_USER_AGENT'];
    
      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|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',$useragent)||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($useragent,0,4))) {
        $variables['is_node'] = "mobile";
      }
    }
  2. In node.tpl.php geben Sie diesen Code ein

    if($is_node == "mobile"){
      //Add your html
    } 
  3. Danach den Cache leeren.

Quelle: Mobile Browser erkennen

Aryashree Pritikrishna
quelle