1С-Битрикс. Как подключить отдельный шаблон для планшетов и мобильных устройств
Для определения типа устройства пользователя воспользуемся библиотекой Mobile_Detect.php, через так называемое «PHP выражение» в настройках сайта. Едиственная проблема — туда можно писать только выражение PHP, а Mobile_Detect требует создание объекта. Не беда. Отнаследуемся от него и напишем синглтон.
namespace Olepro\Classes\Helpers; require $_SERVER['DOCUMENT_ROOT'] . '/local/php_interface/classes/inc/Mobile_Detect.php'; class MobileDetect extends \Mobile_Detect { /** @var \Mobile_Detect */ protected static $instance; /** * @return \Mobile_Detect */ public static function getInstance() { if (!isset(self::$instance)) { self::$instance = new self(); } return self::$instance; } }
Добавим его автозагрузку в init.php.
use \Bitrix\Main\Loader; Loader::registerAutoLoadClasses(null, array( '\Olepro\Classes\Helpers\MobileDetect' => '/local/php_interface/classes/helpers/mobiledetect.php', ));
В папку /local/php_interface/classes/inc/ нужно положить оригинальный класс Mobile_Detect.
Осталось дело за малым.
Идём в настроки сайта, в раздел «Шаблон сайта», выбираем свой шаблон. Ставим сортировку меньше (важно!), чем у основного шаблона. В «Тип условия» ставим «Выражение PHP». Ну а в условие пишем:
(class_exists('Olepro\Classes\Helpers\MobileDetect') && (Olepro\Classes\Helpers\MobileDetect::getInstance()->isMobile() || (isset($_COOKIE['mobile']) && $_COOKIE['mobile'] == 'Y')))
Материалы:
Mobile_Detect.php
20 комментариев
Насколько я понял первую часть кода надо разместить в php_interface/classes/helpers/mobiledetect.php. Я так и сделал. Но не работает!!!
А теперь расскажите по порядку: что сделали и что куда вставили, и что именно не работает.
Все работает, если вместо /local/ вписать что-то другое, /ишекгч/ например
Спасибо автору за статью.
Первую часть вставляем в шаблон?
сюда /local/php_interface/classes/helpers/mobiledetect.php
Олег, спасибо! Прекрасный пример.
Как еще один вариант, чтобы показывать шаблон только для мобильников, исключая планшеты, можно прописать такое условие:
Подобный класс уже есть в битриксе. Use Bitrix\Conversion\Internals; $detector = new Internals\MobileDetect(); if ( !$detector->isMobile() ) { //браузер не относится к мобильным. }
Ага, спасибо за информацию. Не знал. Но для использования Bitrix\Conversion\Internals\MobileDetect должен быть установлен модуль конверсии.
И хорошо, что взяли готовый класс, а не начали писать свой велосипед :-)
Олег, большое спасибо за статью. Но не могли бы Вы более подробно расписать...Очень нужно это решение, но к сожалению ничего не понял....
Прошу помочь...
Евгений, пишите через форму обратной связи на странице «Контакты».
Спасибо за статью:) Все работает!))
Спасибо!
Спасибо!!!
Отличная библиотека и отличная инструкция по применению, спасибо.
Статья в принципе не понятная - не понятно что куда и откуда ложить и вписывать и половины каталогов у меня в приципе нет
Trionik, судя по предыдущим комментариям — непонятна она только вам.
Если есть вопросы — задавайте. И больше конкретики.
Не понятно почему может не срабатывать, ошибки не выводит, но и шаблон не грузит белый экран.Хотя на другом сайте тестил и там норм работает.
Александр, смотрите логи ошибок веб-сервера.
Здравствуйте. Подскажите, а почему может возникать такая проблема. Если долго гулять по сайту 30 -40 страниц то периодически выскакивает мобильный шаблон?
Как проверяете в итоге в условии применения шаблона? Включен ли и настроен композит?