Адаптивные шаблоны сегодня уже давно не редкость, и частенько можно наблюдать, когда один и тот же шаблон адаптируется под разные виды устройств. Это удобно в тех случаях, когда шаблон сайта не перегружен большим количеством элементов, и не создаёт больших проблем при адаптации под мобильные устройства. Бывают и другие случаи, когда для мобильной версии нет необходимости тянуть все данные используемые на полноэкранной версии сайта. Часто приходиться переключать различные компоненты сайта в зависимости от того, с какого устройства заходит пользователь, и делать посредством CSS это не всегда оправдано. По этой причине целесообразно было-бы проверять с какого устройства заходит пользователь, после чего отдавать ему нужные данные.
В данном посту мы поговорим о том, как можно реализовать такой механизм проверки браузера в системе Битрикс.
Один из простых способов проверить тип браузера пользователя, воспользоваться данными заголовка $_SERVER[‘HTTP_USER_AGENT’]. Таким образом заходя на сайт, сервер может видеть браузер, с которого заходит пользователь. Всё что нам остаётся — определить к какому типу устройства относится браузер, далее отдать ему нужные данные.
Первым делом, в шаблоне сайта, в файле header.php (перед началом вывода данных) мы пропишем простой код, который будет определять версию браузера пользователя:
// check device type
$iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$android = strpos($_SERVER['HTTP_USER_AGENT'],"Android");
$palmpre = strpos($_SERVER['HTTP_USER_AGENT'],"webOS");
$berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry");
$ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod");
$mobile = strpos($_SERVER['HTTP_USER_AGENT'],"Mobile");
$symb = strpos($_SERVER['HTTP_USER_AGENT'],"Symbian");
$operam = strpos($_SERVER['HTTP_USER_AGENT'],"Opera M");
$htc = strpos($_SERVER['HTTP_USER_AGENT'],"HTC_");
$fennec = strpos($_SERVER['HTTP_USER_AGENT'],"Fennec/");
$winphone = strpos($_SERVER['HTTP_USER_AGENT'],"WindowsPhone");
$wp7 = strpos($_SERVER['HTTP_USER_AGENT'],"WP7");
$wp8 = strpos($_SERVER['HTTP_USER_AGENT'],"WP8");
$VISITOR_ID = $APPLICATION->get_cookie("MOBILE_VISITOR_MB");
if (($ipad || $iphone || $android || $palmpre || $ipod || $berry || $mobile || $symb || $operam || $htc || $fennec || $winphone || $wp7 || $wp8) &&
empty($VISITOR_ID)) {
// redirect to PDA-version
$APPLICATION->set_cookie("MOBILE_VISITOR_MB", "MOBILE", time()+60*60);
$page = $APPLICATION->GetCurPageParam("site-type=pda", array("site-type"));
LocalRedirect($page);
exit();
}
В списке заданы практически все виды мобильных браузеров, таким образом если условие проверки срабатывает, то обозначаем в cookie мобильную версию браузера. После этого, перенаправляем на ту же страницу, но уже с параметром site-type=pda. При повторном заходе, если cookie уже заданы в браузере устройства, то редиректа происходить не будет.
Далее будет удобно завести некую константу, которая будет содержать значение обозначающее тип сайта для браузера. Константу назовём по-простому — SITE_TYPE, принимать будет значение pda либо original (мобильная версия и полная соответственно).
В файле init.php нашего проекта пропишем следующий код:
if (isset ($_GET['site-type'])){
switch ($_GET['site-type']) {
case 'pda':
setcookie('site_type', 'pda', time()+3600*24*30,'/');
define('SITE_TYPE','pda');
break;
default:
setcookie('site_type', 'original', time()+3600*24*30,'/');
define('SITE_TYPE','original');
}
} else {
$checkType='';
if (isset($_COOKIE['site_type']))
$checkType = $_COOKIE['site_type'];
switch ($checkType) {
case 'pda':
define('SITE_TYPE','pda');
break;
default:
define('SITE_TYPE','original');
}
}
В целом, всё готово. Далее в коде подключения компонентов можно проверять значение константы SITE_TYPE и подключать нужные участки кода. Для простого примера посмотрим подключение костюмного компонента слайдера.
Компонент довольно простой, выводит слайдер в зависимости от типа браузера. Подробнее о реализации данного компонента можно почитать в посту «Создаём слайдер на Битрикс». В качестве параметра компоненту передаётся одно значение – TYPE_SID, которое обозначает тип слайдов, которые будут выбираться самим компонентом и выводиться в браузер.
$APPLICATION->IncludeComponent(
"custom:swiper.slider",
"",
Array(
"TYPE_SID" => (SITE_TYPE != 'pda' ? "MAIN" : "mobile_version")
)
);
По этой же аналогии можно подключать различные участки кода, проверка будет как вы уже поняли выполняться аналогичным образом.
if (SITE_TYPE == 'pda'){
// код для мобильной версии
} else {
// код для полной версии
}
Используя константу можно гибко управлять шаблоном сайта, управляя представлением данных максимально просто. К примеру, вы можете подключать разные типы меню для разных типов экрана, менять отображение товаров в каталоге, оптимизировать вывод элементов на странице, и многое другое.