Исправление автопереключения мобильного шаблона для LS 1.0.3
Как многие заметили, мобильный шаблон для LS 1.0.3 с какого-то времени перестал работать.
Например, если почистить куки браузера и зайти на главную страницу сайта, то вы будете автоматически перенаправлены на мобильную версию шаблона вне зависимости от того, с какого устройства вы зашли.
То есть на практике все новые посетители попадают на мобильную версию вашего сайта, пока не установят специальную куку (принудительно не переключатся на десктопную версию).
И вина здесь не на разработчике плагина, а на сервисе Янлекса, который перестал работать (апи сервиса больше не предоставляется).
Ниже смотрим как исправить ситуёвину своими руками.
Я не программист, сразу скажу, чтоб в личку с вопросами не лезли, просто балуюсь на досуге ;)
Для определения типа устройства я использовал стороннюю библиотеку отсюда — Mobile Detect.
Я скачал последнюю версию скрипта и уложил ее в каталог
/ваш/сайт/plugins/mobiletpl/classes/lib/mobile-detect
Файл
Mobile_Detect.php
Собсно это готовый класс, который легко и просто можно вызвать для выполнения всего одной функции:
(в понятие мобильного здесь входят и планшеты и смартфоны, но при необходимости можно вызвать другие методы, чтобы отфильтровать нужный вам тип устройства)
Теперь осталось подключить этот класс и переопределить логику работы плагина для мобильного шаблона.
Начнем с первого.
В файле
/mobiletpl/include/init.php
Добавляем строку:
То есть получается так:
За обработку переключателя отвечает код в файле
/ваш/сайт/plugins/mobiletpl/classes/lib/mobile-detect/MobileDetect.php (не путать с тем, что мы выкачивали и подключали отдельно!!!)
Тут нужно убить запросы к апи сервиса яндекса и переопределить логику определения мобилок.
Я не кодер, как и писал раньше, так что нарубил как смог ))))
Чтобы не мучать вас сильно своими правками, начало кода стало выглядеть так (если хотите, можете проверить что я менял, сверив с оригиналом).
Остальное оставляем как и раньше.
Вот так выглядит весь файл в конце правок
Например, если почистить куки браузера и зайти на главную страницу сайта, то вы будете автоматически перенаправлены на мобильную версию шаблона вне зависимости от того, с какого устройства вы зашли.
То есть на практике все новые посетители попадают на мобильную версию вашего сайта, пока не установят специальную куку (принудительно не переключатся на десктопную версию).
И вина здесь не на разработчике плагина, а на сервисе Янлекса, который перестал работать (апи сервиса больше не предоставляется).
Ниже смотрим как исправить ситуёвину своими руками.
Я не программист, сразу скажу, чтоб в личку с вопросами не лезли, просто балуюсь на досуге ;)
Для определения типа устройства я использовал стороннюю библиотеку отсюда — Mobile Detect.
Я скачал последнюю версию скрипта и уложил ее в каталог
/ваш/сайт/plugins/mobiletpl/classes/lib/mobile-detect
Файл
Mobile_Detect.php
Собсно это готовый класс, который легко и просто можно вызвать для выполнения всего одной функции:
Это мобильный? () //;))
(в понятие мобильного здесь входят и планшеты и смартфоны, но при необходимости можно вызвать другие методы, чтобы отфильтровать нужный вам тип устройства)
Теперь осталось подключить этот класс и переопределить логику работы плагина для мобильного шаблона.
Начнем с первого.
Подключил класс я там же, где ort подключал свой ;)
В файле
/mobiletpl/include/init.php
Добавляем строку:
require_once(dirname(dirname(__FILE__)).'/classes/lib/mobile-detect/Mobile_Detect.php');
То есть получается так:
<?php require_once(dirname(dirname(__FILE__)).'/classes/lib/mobile-detect/MobileDetect.php'); // Include and instantiate the class. require_once(dirname(dirname(__FILE__)).'/classes/lib/mobile-detect/Mobile_Detect.php'); MobileDetect::IsNeedShowMobile();
Теперь логика
За обработку переключателя отвечает код в файле
/ваш/сайт/plugins/mobiletpl/classes/lib/mobile-detect/MobileDetect.php (не путать с тем, что мы выкачивали и подключали отдельно!!!)
Тут нужно убить запросы к апи сервиса яндекса и переопределить логику определения мобилок.
Я не кодер, как и писал раньше, так что нарубил как смог ))))
Чтобы не мучать вас сильно своими правками, начало кода стало выглядеть так (если хотите, можете проверить что я менял, сверив с оригиналом).
class MobileDetect { static protected $bIsNeedShowMobile=null; /** * Оставляем из всех только эту строчку выше */ /** * Определение типа устройства - мобильное или нет * * @return bool */ static public function DetectMobileDevice() { $detect = new Mobile_Detect; //инициализируем тот самый подключенный класс if ( $detect->isMobile() ) { //а это и есть та самая чудо-функция из класса return true; } return false; }
Остальное оставляем как и раньше.
Вот так выглядит весь файл в конце правок
<?php class MobileDetect { static protected $bIsNeedShowMobile=null; /** * Выполняет запрос к API сервиса * * @param array $aRequest Список параметров * * @return bool|array */ /** * Определение типа устройства - мобильное или нет * * @return bool */ static public function DetectMobileDevice() { $detect = new Mobile_Detect; if ( $detect->isMobile() ) { return true; } return false; } static public function IsNeedShowMobile() { if (!is_null(self::$bIsNeedShowMobile)) { return self::$bIsNeedShowMobile; } /** * Принудительно включаем мобильную версию */ if (getRequest('force-mobile',false,'get')=='on') { setcookie('use_mobile',1,time()+60*60*24*30,Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'),false); return self::$bIsNeedShowMobile=true; } /** * Принудительно включаем полную версию */ if (getRequest('force-mobile',false,'get')=='off') { setcookie('use_mobile',0,time()+60*60*24*30,Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'),false); return self::$bIsNeedShowMobile=false; } /** * Пользователь уже использует мобильную или полную версию */ if (isset($_COOKIE['use_mobile'])) { if ($_COOKIE['use_mobile']) { return self::$bIsNeedShowMobile=true; } else { return self::$bIsNeedShowMobile=false; } } /** * Запускаем авто-определение мобильного клиента */ if (self::DetectMobileDevice()) { setcookie('use_mobile',1,time()+60*60*24*30,Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'),false); return self::$bIsNeedShowMobile=true; } else { setcookie('use_mobile',0,time()+60*60*24*30,Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'),false); return self::$bIsNeedShowMobile=false; } } static public function IsMobileTemplate($bHard=true) { if ($bHard) { return self::IsNeedShowMobile(); } else { return Config::Get('plugin.mobiletpl.template') && Config::Get('view.skin')==Config::Get('plugin.mobiletpl.template'); } } }
9 комментариев
На мозилле в прошлом году перестала включаться мобильная версия сайта, в хроме как работала так и работает.
Переделал по Вашему варианту автоопределение, в хроме также работает, а в мозилле также нет))))
какие предположения будут?