Làm cách nào để phát hiện trình duyệt di động sử dụng PHP trong nội dung?


9

Sử dụng Drupal 7.14 với bộ lọc PHP trên tôi có các loại nội dung Trang cơ bản sau:

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

Tôi nhận được thông báo lỗi:

Lưu ý: Biến không xác định: is_mobile in eval () (dòng 1 của D: \ website \ module \ php \ php.module (80): mã eval () 'd).

Tôi có thể hiểu được - Tôi đang cố lấy một biến từ hệ thống Drupal nhưng có cách nào để làm điều này không? Có thể sử dụng Tokens?


Để phát hiện các trình duyệt Di động, bạn cần kiểm tra Tác nhân Người dùng và sau đó viết logic của bạn cho các thiết bị khác nhau hoặc sử dụng các mô-đun đóng góp theo đề xuất của MPD.
GoodSp33d

Câu trả lời:


5

Phát hiện di động không được tích hợp vào Drupal hoặc các chủ đề phổ biến nhất ( tuy nhiên tôi nghĩ Chủ đề Thích ứng thực hiện). Bạn cần cài đặt một mô-đun contrib để làm điều này. Ba tùy chọn là Browsecap , Công cụ di độngPhát hiện di động . Nơi bạn đi từ đây phụ thuộc vào mô-đun bạn đang sử dụng.


Tôi thực sự đang sử dụng Chủ đề thích ứng nhưng không thể thấy một cách rõ ràng để kết nối với chủ đề đó bằng cách sử dụng một cái gì đó như Browsecap. Oh well - cảm ơn tất cả các thông tin phản hồi!
Andy_D

Khá chắc chắn rằng bạn chỉ cần cài đặt Browsecap và kích hoạt các cài đặt phù hợp. AT cũng có thể hỗ trợ Phát hiện di động trong tương lai.
mpdon Arena

$is_mobilecó vẻ như là từ mô-đun Phát hiện Di động mà MPD đã đề cập. Nhìn vào trang dự án cho mô-đun đó, có vẻ như bạn cũng cần thư viện Mobile_Detect. Bạn đã cài đặt chưa?
Chapabu

1
@Chapabu, $is_mobilekhông được cung cấp trực tiếp bởi Mobile Detect (Tôi là tác giả mô-đun). AT cung cấp điều này ra khỏi hộp nếu mô-đun Browsecap được cài đặt / kích hoạt.
mpdon Arena

@MPD ha ... thật là xấu hổ ;-) Tôi vừa đọc phần còn lại của phần đó một cách chính xác trên trang dự án và vâng ..... * cúi đầu trong sự xấu hổ *
Chapabu

3

Tôi đã viết một mô-đun rất đơn giản để phát hiện các tác nhân người dùng di động và đặt một biến toàn cục tương ứng mà sau đó bạn có thể truy cập trong mẫu của mình.

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

Trong mẫu của bạn, sau đó sử dụng nó như vậy:

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

Bạn có thể thử sử dụng mô-đun Theme Key để kiểm tra thiết bị Di động.
Nó cung cấp sự linh hoạt để thay đổi chủ đề không chỉ dựa trên loại thiết bị mà còn có thể chủ đề các phần khác nhau của trang web dựa trên các điều kiện khác nhau.
Ở đây, là một liên kết đến một hướng dẫn đơn giản bằng cách sử dụng theme.

Nếu bạn mới bắt đầu thiết kế trang web, tôi khuyên bạn nên sử dụng chủ đề Omega để phát triển, vì nó có tùy chọn thay đổi bố cục và làm cho nó phản hồi (theo kích thước / độ phân giải màn hình). Nó cũng hỗ trợ HTML5.
Nó có thể được kết hợp tốt với mô-đun Công cụ Omega , để tạo chủ đề phụ Omega từ UI.


Đây là một trang web phát triển tốt không may sử dụng Theme Thích ứng. Chúng tôi đang trong giai đoạn kiểm tra thiết bị chéo và thay vì làm lại các đoạn mã lớn Tôi đang tìm cách để sử dụng những gì chúng tôi có. Cảm ơn vì bạn đã phản hồi.
Andy_D

2
  1. Trong template.php đặt mã này

    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. Trong node.tpl.php đặt mã này

    if($is_node == "mobile"){
      //Add your html
    } 
  3. Sau đó xóa bộ nhớ cache.

Nguồn: Phát hiện trình duyệt di động

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.