Як виявити мобільний браузер за допомогою PHP у вмісті?


9

Використовуючи Drupal 7.14 з увімкненим фільтром PHP, у базовому типі вмісту базової сторінки є наступне:

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

Я отримую повідомлення про помилку:

Примітка: Не визначена змінна: is_mobile в eval () (рядок 1 D: \ веб-сайти \ модулі \ php \ php.module (80): код eval () 'd).

Я щось розумію - я намагаюся схопити змінну з системи Drupal, але чи є це? Можливо, користуєтеся токенами?


Щоб виявити браузери мобільних пристроїв, потрібно перевірити User Agent і потім написати свою логіку для різних пристроїв або використовувати модулі Contrib, як це запропоновано MPD.
GoodSp33d

Відповіді:


5

Мобільне виявлення не вбудоване в Drupal або найпопулярніші теми (я думаю, що адаптивна тема є , хоча). Для цього потрібно встановити модуль contrib. Три варіанти: браузерна програма , мобільні інструменти та мобільне виявлення . Куди ви підете звідси, залежить від того, який модуль ви використовуєте.


Я фактично використовую адаптивну тему, але не можу побачити очевидний спосіб підключитися до неї, використовуючи щось на зразок Browscap. Ну добре - дякую за всі відгуки!
Andy_D

Досить впевнений, що вам просто потрібно встановити Browscap і включити правильні налаштування. AT також може підтримувати Mobile Detect у майбутньому.
mpdonadio

$is_mobileсхоже, що це з модуля мобільного виявлення, про який згадував MPD. Переглядаючи сторінку проекту для цього модуля, схоже, вам також потрібна бібліотека Mobile_Detect. У вас це встановлено?
Чапабу

1
@Chapabu, $is_mobileне надається безпосередньо програмою Mobile Detect (я автор модуля). AT надає це з вікна, якщо модуль Browscap встановлений / включений.
mpdonadio

@MPD га ... це непохитно ;-) Я тільки що прочитав решту цього розділу належним чином на сторінці проекту, і так ..... * вішає голова від сорому *
Чапабу

3

Я написав дуже простий модуль, який виявляє мобільні користувацькі агенти та встановлює відповідну глобальну змінну, до якої ви зможете отримати доступ у своєму шаблоні.

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

Всередині шаблону ви можете використовувати його так:

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

2

Ви можете спробувати скористатися модулем « Ключовий ключ», щоб перевірити наявність мобільного пристрою.
Він забезпечує гнучкість для зміни теми не тільки залежно від типу пристрою, але також може тематизувати різні частини сайту на основі різних умов.
Ось посилання на простий підручник за допомогою тематичної клавіші.

Якщо ви тільки почали розробляти сайт, я рекомендую вам використовувати тему Omega для розробки, оскільки у неї є можливість змінити макет і зробити його чутливим (відповідно до розміру / роздільної здатності екрана). Він також підтримує HTML5.
Це може добре поєднуватися з модулем Omega Tools , щоб створити підтему Omega з інтерфейсу користувача.


На жаль, це добре розроблений сайт, на жаль, використовуючи адаптивну тему. Ми перебуваємо на етапі перевірки пристроїв, і замість того, щоб повторювати великі шматки коду, я шукаю способи використовувати те, що ми маємо. Дякуємо за відгук.
Andy_D

2
  1. У template.php поставте цей код

    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. У node.tpl.php помістіть цей код

    if($is_node == "mobile"){
      //Add your html
    } 
    
  3. Після цього очистіть кеш.

Джерело: Виявити мобільний браузер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.