Разработка сайтов на UMI.CMS
Знать UMI.CMS в совершенстве невозможно.
Даже сами разработчики знают о ней не все...

UMi

Ursa Minor

PDA-версия. Часть 1. Определение типа устройства

Однажды мне потребовалось пристроить к сайту автоматическое перенаправление мобильных клиентов на соотв. версию. Лично я не люблю такие вещи: надо будет - перейду сам, а угадывать мои желания незачем - все равно ошибетесь) Но заказчик захотел...
UPD 15.01.2011: наконец-то, пришли к решению отказаться от этого безумия и дать пользователю возможность самому выбирать какую версию он хочет видеть.

Как оказалось, для таких целей Яндекс любезно дарит нам свой API Яндекс.Детектор

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

  • модель и производитель;
  • разрешение экрана;
  • разновидность используемой платформы и тип дистрибутива J2ME (4 категории);
  • возможности Java-приложений (доступ к камере и файловой системе устройства, тип корневого сертификата и размер значка приложения).

 

Прикрутим его к ЮМИ.

 

В шапку страницы записываем макрос %custom wap_autoredirect()%

Сам макрос

<?php

public function wap_autoredirect(){

$headers = '';

//получаем все заголовки
foreach ($_SERVER as $key => $value) {
if (strpos($key, 'HTTP_') === 0 && $key != 'HTTP_HOST') {
$key = strtolower(strtr(substr($key, 5), '_', '-'));
$headers .= $key . ': ' . $value . "rn";
}
}

//упорядочиваем их
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=> $headers,
)
);

//отправляем Яндексу
$s = file_get_contents('http://phd.yandex.net/detect', false, stream_context_create($opts));

//из полученной строки делаем  xml
$s = <<<END
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
{$s}
</root>
END;


$xml = simplexml_load_string($s);

$error = $xml->{'yandex-mobile-info-error'};

//если тип устройства определить не удалось - возвращаем пусткю строку
if($error == 'Unknown user agent and wap profile') return '';

//иначе делаем редирект на главную мобильной версии
umiHierarchy::getInstance()->__destruct();
outputBuffer::current()->redirect('http://pda.мой_домен/');


}
?>

 

Новости

30.10.2016

Обновлено описание макроса для вывода всех элементов справочника UMI.CMS с учетом версии 14.

 

21.07.2015

Памятка по обновлению до debian 8.1. Приятно вкусить все плюшки PHP 5.6

11.11.2014

Как выполнить SQL-запрос из bash-скрипта. Памятка

11.11.2014

Как отследить нагрузку сайта на сервер.

06.11.2014

Заготовка для галереи изображений с прокруткой. Не знаю, когда дойдут руки довести ее до вида плагина, поэтому открываю как есть. Можно доработать.

05.11.2014

Выкладываю как заготовку свой слайдер изображений на mootools

Все обновления