Время для прочтения: 1 мин. 24 сек.

Создание PDA-версии сайта: определение мобильных пользователей

Очень часто при изготовлении сайта встаёт необходимость в создании облегченной версии (PDA) для телефонов, планшетов и смартфонов.

Чтобы определить, какую версию сайта показывать пользователю для его устройства и реализовать загрузку той версии мобильного приложения, которая больше всего подходит советую использовать API Яндекс.Детектор.

API Яндекс.Детектор предоставляет возможность определения модели и характеристик мобильного устройства пользователя сайта по заголовкам HTTP-запросов, передаваемых браузером его устройства.

Пишем простенькую функцию для определения мобильных браузеров, основанную на примере от Яндекса.


<?php
function mobileDetect() {
    $headers = '';

    foreach ($_SERVER as $key => $value) {
        if (strpos($key, 'HTTP_') === 0 && $key != 'HTTP_HOST' && $key != 'HTTP_CONNECTION') {
            $key = strtolower(strtr(substr($key, 5), '_', '-'));
            $headers .= $key . ': ' . $value . "\r\n";
        }
    }

    $opts = array(
        'http' => array(
            'method' => "GET",
            'header' => $headers,
            'timeout' => 6
        )
    );

    $response = file_get_contents('http://phd.yandex.net/detect', false, stream_context_create($opts));
    
    // Распаковать строку
    $response = gzdecode( $response );

    if (preg_match('|<yandex-mobile-info-error>|si', $response)) {
        return false;
    }

    return true;
}
?>

Теперь создаём поддомен на вашем основном домене. Например, если у меня был домен www.peacekeeper.ru, то я создал поддомен pda.peacekeeper.ru (можно и m.peacekeeper.ru).

Использовать нашу функцию будем примерно так: если человек зашел на сайт с мобильного телефона — редиректим его на ту же самую страницу, которую он запросил, только на поддомене pda.peacekeeper.ru.


<?php
// Редирект на PDA-версию
if (mobileDetect()) {
    header('Location: http://pda.'.trim($_SERVER['SERVER_NAME'], 'www.').$_SERVER['REQUEST_URI']);
}
?>

Пример можно посмотреть здесь (заходить, естественно, через мобилку). Продолжение следует ヅ

Фото Ексей Пантелеев

Ссылки

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>

  • SkyGambol

    А если не работает? Мне нужно, чтобы перебрасывало не на поддомен а на каталог: «http://cайт.ру/pda/index.php». Я написал это заместо http://pda., но ничего не происходит. Подскажите мне пожалуйста, что именно я не так делаю!

    • Для начала попробуйте вывести print_r( $response ); результат в студию

      • SkyGambol

        Извините, я с php только начинаю знакомиться-много туплю. Давайте по порядку: на главной странице десктопной версии сайта я написал <?php echo print_r( $response ) ?> и мне вывело «1». Но, как понимаю, должно вывести лог о работе PHP?

    • Внутри функции напишите:


      $response = file_get_contents('http://phd.yandex.net/detect', false, stream_context_create($opts));
      print_r( $response );

      • SkyGambol

        Выводит: «Unknown user agent and wap profile»

        • Когда с телефона заходите?

          • SkyGambol

            Да. Но когда на прямую перехожу на phd.yandex.net/detect определяется.

            • Смотрите строку 23 в коде — я добавил распаковку строки

              • SkyGambol

                Теперь вторая функция, для перенаправления, крашит страницу. Может быть я не так пишу место назначения каталога?

                • Возможно, вы пример свой покажите.

                  • SkyGambol

                    if (mobileDetect()) {
                    header('Location: http://site.ru/pda/index.php'.trim($_SERVER['SERVER_NAME'], 'www.').$_SERVER['REQUEST_URI']);
                    }

                    И мне нет необходимости перенаправлять на туже страницу в мобильной версии.

  • Саша

    Спасибо, то, что надо.
    Денег нет. Могу натурой 🙂

  • Роман

    Благодарю за код. То, что нужно.

  • Аноним

    Сайт peacekeeper.ru не перенаправляет на мобильную версию. Проверял с SE Walkman.

  • Здравствуйте, автор статьи!
    А есть ли плюсы или другие минусы пользования услугами программ для создания мобильных версий сайта?
    Ну основным минусом является платная версия или вставка ссылок на свои сайты!
    Вот сайт dudamobile.com на котором я создал моби версию для своего сайта, но к сожалению так и не могу установить!(
    Если будут рекомендации буду благодарен!

    • Я программист и привык код писать сам, не доверяя стороннему софту, потому что иначе в коде будет много «мусора». Вам тоже не советую использовать их. В чем проблема написать валидный код ручками?

  • Павел М.

    Сергей, хули дела
    Пели куки и сессии

  • Что вы имели ввиду под словом «покопаться», ведь эту функцию вы сами пишите 🙂 И заголовки сами создаете.

  • Это тупо, потому что каждый рахз при загрузке страницы происходит отправка запроса ещё и на сервер яндекса. Надо покапаться в $headers, которые создаёт эта функция, в них кроется ответ.