İçerikte PHP kullanarak bir mobil tarayıcı nasıl tespit edilir?


9

PHP filtre ile Drupal 7.14 kullanarak bir Temel Sayfa içerik türü var:

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

Hata mesajını alıyorum:

Uyarı: Tanımsız değişken: eval () içinde is_mobile (D: \ websites \ modules \ php \ php.module (80): eval () 'd kodunun 1. satırı).

Ben bir tür anlamak - Ben Drupal sisteminden bir değişken kapmak için çalışıyorum ama bunu yapmak için herhangi bir yolu var mı? Belki Jeton kullanıyor musunuz?


Mobil tarayıcıları algılamak için Kullanıcı Aracısını kontrol etmeniz ve ardından farklı cihazlar için mantığınızı yazmanız veya MPD tarafından önerilen katkı modülleri kullanmanız gerekir.
GoodSp33d

Yanıtlar:


5

Mobil algılama Drupal veya en popüler temalarda yerleşik değildir (Sanırım Adaptive Theme bunu yapar). Bunu yapmak için bir katkıda bulunmak modülü yüklemeniz gerekir. Üç seçenek şunlardır: Browscap , Mobile Tools ve Mobile Detect . Buradan nereye gideceğiniz, hangi modülü kullandığınıza bağlıdır.


Aslında Uyarlanabilir Temayı kullanıyorum ancak Browscap gibi bir şey kullanarak ona bağlanmak için bariz bir yol göremiyorum. Oh iyi - tüm geribildirim için teşekkürler!
Andy_D

Browscap'ın kurulu olması ve doğru ayarları etkinleştirmeniz gerektiğinden emin olabilirsiniz. AT, gelecekte Mobil Algılamayı da destekliyor olabilir.
mpdonadio

$is_mobileMPD'nin bahsettiği Mobil Algılama modülünden geliyor gibi görünüyor. Bu modülün proje sayfasına bakıldığında, Mobile_Detect kütüphanesine de ihtiyacınız var gibi görünüyor. Yüklediniz mi?
Chapabu

1
@Chapabu, $is_mobiledoğrudan Mobile Detect tarafından sağlanmadı (modül yazarıyım ). Browscap modülü takılıysa / etkinleştirilirse AT bunu kutudan çıkarır.
mpdonadio

@MPD ha ... bu utanç verici ;-) Ben sadece bu bölümün geri kalanını proje sayfasında düzgün okudum ve evet ..... * utanç içinde kafa asılı *
Chapabu

3

Mobil kullanıcı aracılarını tespit eden ve daha sonra şablonunuzdan erişebileceğiniz ilgili bir global değişken belirleyen çok basit bir modül yazdım .

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

Şablonunuzun içinde bunu şu şekilde kullanırsınız:

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

Mobil cihazı kontrol etmek için Tema Anahtarı modülünü kullanmayı deneyebilirsiniz .
Yalnızca cihazın türüne göre değil, aynı zamanda farklı koşullara bağlı olarak sitenin farklı bölümlerini de tema olarak değiştirebilme esnekliği sağlar.
Burada, themekey kullanarak basit bir öğretici bir bağlantıdır .

Siteyi tasarlamaya yeni başladıysanız, düzeni değiştirmek ve duyarlı hale getirmek için bir seçenek olduğu için (ekran boyutuna / çözünürlüğe göre) Omega temasını kullanmanızı tavsiye ederim . Ayrıca HTML5'i de destekler. Kullanıcı arayüzünden bir Omega alt teması oluşturmak için Omega Tools modülü
ile iyi kombine edilebilir .


Bu ne yazık ki Adaptive Theme kullanan iyi geliştirilmiş bir sitedir. Cihazlar arası kontrol aşamasındayız ve büyük kod parçalarını yeniden yapmak yerine elimizdekileri kullanmanın yollarını arıyorum. Geri dönüşünüz için teşekkür ederiz.
Andy_D

2
  1. Template.php dosyasına bu kodu koy

    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 dosyasına bu kodu yazın

    if($is_node == "mobile"){
      //Add your html
    } 
  3. Bundan sonra önbelleği temizleyin.

Kaynak: Mobil Tarayıcıyı Algıla

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.