Верх страницы
Обложка к записи Создание PDA-версии сайта: определение мобильных пользователей
Время для прочтения: 0 мин. 4 сек.

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

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

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

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

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

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.

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

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

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

Ссылки

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, OpenCart, DLE, Laravel, Moonshine, Symfony, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

22 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
12 лет назад

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

Павел М.
Павел М.
12 лет назад

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

Курткин
12 лет назад

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

Аноним
Аноним
11 лет назад

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

Роман
Роман
11 лет назад

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

Саша
Саша
10 лет назад

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

SkyGambol
SkyGambol
9 лет назад

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

mihdan
9 лет назад
Ответить на  SkyGambol

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

SkyGambol
SkyGambol
9 лет назад
Ответить на  mihdan

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

mihdan
9 лет назад
Ответить на  SkyGambol

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


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

SkyGambol
SkyGambol
9 лет назад
Ответить на  mihdan

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

mihdan
9 лет назад
Ответить на  SkyGambol

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

SkyGambol
SkyGambol
9 лет назад
Ответить на  mihdan

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

mihdan
9 лет назад
Ответить на  SkyGambol

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

SkyGambol
SkyGambol
9 лет назад
Ответить на  mihdan

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

mihdan
9 лет назад
Ответить на  SkyGambol

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

SkyGambol
SkyGambol
9 лет назад
Ответить на  mihdan

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

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

Предыдущая запись

Давайте дружить
в Telegram

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы