컨텐츠에서 PHP를 사용하여 모바일 브라우저를 감지하는 방법은 무엇입니까?


9

PHP 필터와 함께 Drupal 7.14를 사용하면 기본 페이지 컨텐츠 유형에 다음이 있습니다.

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

오류 메시지가 나타납니다.

주의 : 정의되지 않은 변수 : eval ()의 is_mobile (D : \ websites \ modules \ php \ php.module (80)의 1 행 : eval () 'd 코드).

나는 일종의 이해합니다-Drupal 시스템에서 변수를 가져 오려고 하는데이 방법이 있습니까? 아마도 토큰을 사용합니까?


모바일 브라우저를 감지하려면 사용자 에이전트 를 확인한 다음 다른 장치에 대한 논리를 작성하거나 MPD에서 제안한 Contrib 모듈을 사용해야합니다.
GoodSp33d

답변:


5

모바일 감지 기능은 Drupal 또는 가장 인기있는 테마에 내장되어 있지 않습니다 ( Adaptive Theme 는 그렇게 생각합니다). 이를 위해 contrib 모듈을 설치해야합니다. 세 가지 옵션은 Browscap , Mobile ToolsMobile Detect 입니다. 여기서 어디로 가는지는 사용중인 모듈에 따라 다릅니다.


나는 실제로 적응 테마를 사용하고 있지만 Browscap과 같은 것을 사용하여 그것에 걸릴 수있는 확실한 방법을 볼 수 없습니다. 오 잘-모든 의견을 보내 주셔서 감사합니다!
Andy_D

Browscap을 설치하고 올바른 설정을 활성화해야합니다. AT는 앞으로 Mobile Detect를 지원할 수도 있습니다.
mpdonadio

$is_mobileMPD가 언급 한 Mobile Detect 모듈에서 온 것 같습니다. 해당 모듈의 프로젝트 페이지를 보면 Mobile_Detect 라이브러리가 필요한 것 같습니다. 설치 했습니까?
Chapabu

1
@Chapabu $is_mobile는 Mobile Detect에서 직접 제공하지 않습니다 (모듈 작성자 임). Browscap 모듈이 설치 / 활성화 된 경우 AT는이를 즉시 제공합니다.
mpdonadio

@MPD 하 ... 그래 ..... *이 중단 부끄러움에 머리 * 난 그냥 제대로 프로젝트 페이지에서 해당 섹션의 나머지 부분을 읽었습니다 ;-) 당황하고있어 그
Chapabu

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도 지원합니다. UI에서 Omega 하위 테마를 만들기 위해 Omega Tools 모듈
과 잘 결합 될 수 있습니다 .


불행히도 Adaptive Theme를 사용하여 잘 개발 된 사이트입니다. 우리는 장치 간 검사 단계에 있으며 많은 양의 코드를 다시 실행하는 대신 우리가 가진 것을 활용하는 방법을 찾고 있습니다. 피드백을 주셔서 감사합니다.
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. 그 후 캐시를 지우십시오.

출처 : 모바일 브라우저 감지

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.