Неточно определяется device_type в 2.5.1

#1 1 августа 2016 в 16:30
Почему-то device_type на 2.5.1 определяется так:
1) На смартфонах — mobile (правильно)
2) На планшетах Android — mobile (НЕправильно, должно быть tablet )
3) На планшетах Windows 10 — desktop (НЕправильно, должно быть tablet )
Это только у меня? sad
#2 1 августа 2016 в 20:19
Олег с клещами,
Может поковыряться клещами в самом принципе определения типа дивайса?
Как оно там определяется? Кто знает? Неужели только по разрешению дисплея?
#3 1 августа 2016 в 21:43

Неужели только по разрешению дисплея?

Ris
Я не вникал, времени нет. Но в 2.5.0 заявлено, что определение работает, и ясно, что это не по разрешению дисплея а по типу устройства. И вот как раз это не работает как надо, вроде бы. И тогда не подключить разные шаблоны к разным типам.
Я просто вывел в layout:
  1. <?php echo $device_type ?>
и всё стало видно.
#4 1 августа 2016 в 22:13
Вот процесс вычисления типа дивайса:

  1. private static function loadDeviceType() {
  2.  
  3. $device_type = (string)cmsUser::getCookie('device_type');
  4.  
  5. if(!$device_type || !in_array($device_type, self::$device_types, true)){
  6.  
  7. cmsCore::loadLib('mobile_detect.class');
  8.  
  9. $detect = new Mobile_Detect();
  10.  
  11. $device_type = ($detect->isMobile() ? ($detect->isTablet() ? 'tablet' : 'mobile') : 'desktop');
  12.  
  13. cmsUser::setCookie('device_type', $device_type, 31536000); // на 1 год
  14.  
  15. }
  16.  
  17. self::$device_type = $device_type;
  18.  
  19. }
То есть определение устройства производится в \system\libs\mobile_detect.class.php
Попробуйте дописать туда Ваши устройства, может заработает?
#5 1 августа 2016 в 22:17

Попробуйте дописать туда Ваши устройства

Ris
А лучше обновите эту библиотеку mobiledetect.net/
В CMS файл библиотеки лежит здесь: /system/libs/mobile_detect.class.php
#6 1 августа 2016 в 23:22
К сожалению, Mobile Detect не идеален даже по своей идее. ИМХО: при текущем раскладе, ни нам, ни разработчикам Mobile Detect, ни кому-то ещё, не узнать о всех существуюших устройствах в актуальный момент. Потому обновляйте бибиотеку, не обновляйте, — ошибки всё равно будут.
С другой стороны ничего более путного (выполняемого на стороне сервера) чем Mobile Detect я лично так и не нашёл.
Исходя из этого и писал как-то: лучше уточнить, и позволить "гулять" по версиям
#7 2 августа 2016 в 09:21

А лучше обновите эту библиотеку mobiledetect.net/

Fuze
Эхе-хе… Обновился до 2.8.22 — та же история sad
Видимо, нет смысла в этом. Придётся продолжать привязываться к разрешению экрана, или воспользоваться методом от Олег Васильевич я,
#8 2 августа 2016 в 09:30
Олег с клещами,
Я специально проверял с планшета на андроиде. Вполне четко пишет tablet.
Может у Вас из-за каких-то нюансов с шаблоном такая история?
#9 2 августа 2016 в 09:44


Олег с клещами,
Я специально проверял с планшета на андроиде. Вполне четко пишет tablet.
Может у Вас из-за каких-то нюансов с шаблоном такая история?

Ris

Нет, к шаблону это не имеет отношение. Проверил библиотеку, и конечно, там далеко не все устройства прописаны. Из-за этого трабла.
Должен быть какой-то иной путь. Вот например сайт 1and1.com что-то другое использует. На всех моих устройствах всё правильно определил, то есть там явно не библиотека Mobile_Detect. А что же тогда?!
#10 2 августа 2016 в 09:52

там далеко не все устройства прописаны. Из-за этого трабла.

Олег с клещами
Трабла не из-за этого. Ни мобильник с которого я заходил, ни планшет в библиотеке не прописаны, но определяются четко.
Доеду до работы — попрошу у коллег с виндофонами и виндотаблетами проверить.

Вообще можно для проверки попробовать добавить устройства в библиотеку. Для примера:
  1. 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533',
дорисовываю свой телефон:
  1. 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|D5803',
#11 2 августа 2016 в 10:25

Вот например сайт 1and1.com что-то другое использует. На всех моих устройствах всё правильно определил

Олег с клещами
Олег с клещами, а как вы определили что сайт правильно определил?

Кроме Mobile_Detect есть и другие библиотеки, например
device-detector
php-browser-detector
agent — форк mobile detect
есть и js-библиотеки:
Detectizr
device-js
наверняка есть и другие =)

Не копал глубоко, но предполагаю, что работа всех этих библиотек основывается на парсинге заголовочных данных, и, следовательно, результат не может быть стопроцентно гарантирован. Это скорее справочная информация, которую стоит применять при разработке, но не полагаться на нее.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.