Вопрос к создателям шаблонов, про дополнение позволяющее подключать отдельный шаблон для разных устройтв.

#1 13 мая 2016 в 15:03
В обновлении 2.5 присутствует возможность подключать для разных устройств разные шаблоны. В связи с этим у меня много вопросов. Я запутался в том как всем этим воспользоваться. Например если я решил создать отдельный шаблон для мобильного к дополнению к основному, то стоит ли у основного шаблона исключить адаптивный вариант для мобильных? Хотел бы обсудить в данной теме обсудить все вопросы касаемо данного дополнения.
#2 13 мая 2016 в 19:45
Тоже посижу послушаю.
Я пока из новых фич воспользовался раздельными шаблонами для сайта и админки и выкинул из своего шаблона админские части.
#3 13 мая 2016 в 21:20
Сложно будет тестировать, например у меня показывает desktop_device_type, когда сжимаю браузер до маленьких размеров или когда переключаюсь к device mode в хроме…
#4 13 мая 2016 в 21:23

например у меня показывает desktop_device_type, когда сжимаю браузер до маленьких размеров или когда переключаюсь к device mode в хроме...

Evanescence
Так и должно быть. Устройство определяется не по размеру экрана.
#5 13 мая 2016 в 21:31
а как прятать виджет для мобильных и наоборот выводить его только когда мобильная версия?
#6 13 мая 2016 в 22:08

а как прятать виджет для мобильных и наоборот выводить его только когда мобильная версия ?

rookee
Хорошая идея. Добавим в виджеты опцию.
#7 13 мая 2016 в 22:17
Решил немного разобраться что да как там работает после этой темы.
Библиотека в iCMS2 располагается здесь: ..\system\libs\mobile_detect.class.php (репозиторий и оф. сайт).

Итак, подготовленные данные передаются в шаблон, при конструировании которого определяется тип устройства с которого пользователь открыл сайт:
..\system\core\template.php ( function __construct($name=''){...} )
  1. ...
  2. $device_type = cmsRequest::getDeviceType();
  3. $template = $config->template;
  4.  
  5. if($device_type !== 'desktop'){
  6. $device_template = cmsConfig::get('template_'.$device_type);
  7. if($device_template){
  8. $template = $device_template;
  9. }
  10. }
  11.  
  12. $this->setName($template);
  13. ...
Отсюда понятно, что если сайт открывается не с десктопа, то из конфига читаются настройки и меняется шаблон вывода. (В админке установки делаются в Настройки — Общие — Интерфейс и выбор соответствующего шаблона для каждого из устройств).
Принципиально на этом всё)) Т.е., как и говорил Олег Васильевич я, функционал по умолчанию, в первую очередь, рассчитан на создание нескольких шаблонов для каждого из устройств, что имеет как свои плюсы так и минусы.
Для себя более перспективным я вижу использование одного шаблона в коде которого указывается что и для какого устройства выводить.
Например в ..\templates\default\main.tpl.php можно добавить позиции для вывода виджетов только для десктопа:
  1. ...
  2. <?php if($this->hasWidgetsOn('top_desktop') && $device_type=='desktop') { ?>
  3. <?php $this->widgets('top', false, 'wrapper_plain'); ?>
  4. <?php } ?>
  5. ...
В main.tpl.php $device_type передается в конструкторе шаблона. При рендере файлов шаблона из компонентов можно забрать эту переменную из объекта cmsRequest, например так:
  1. cmsRequest::getDeviceType();
или, если объект уже инициализирован
  1. $request->device_type;
С помощью нехитрых условий можно можно отдавать одни данные для мобильных клиентов и другие данные для десктопов:
  1. if ($request->device_type == 'mobile') {
  2. cmsTemplate::getInstance()->render('template_for_mobile');
  3. } else {
  4. cmsTemplate::getInstance()->render('template_for_desktop');
  5. }
Приведенный пример полностью синтетический =)
В целом возможности ограничены только полетом фантазии как это использовать!

UPS Пока писал, тут уже целая дискуссия зародилась. Извиняюсь за возможные повторы...
#8 14 мая 2016 в 00:33

Хорошая идея. Добавим в виджеты опцию.

Fuze
Тода логичной выглядит подобная опция и для типов контента (хотя б для них)
#9 14 мая 2016 в 00:38

Тода логичной выглядит подобная опция и для типов контента (хотя б для них)

Олег Васильевич я
Не очень понял что имеется в виду
#10 14 мая 2016 в 00:58

Сложно будет тестировать, например у меня показывает desktop_device_type, когда сжимаю браузер до маленьких размеров или когда переключаюсь к device mode в хроме...

Evanescence
Я на днях клиенту меню делал, и тоже столкнулся с этой проблемой, тут скорее всего эмулятор нужен, но я пока нашел временное решение. Вот код
  1.  
  2. <?php $device_type = cmsRequest::getDeviceType(); ?>
  3.  
  4. <?php if($device_type !== 'desktop') { ?>
  5.  
  6. <?php } else { ?>
  7.  
  8. <?php } ?>
  9.  
осознав что на компьютере я не смогу проверить код, я просто пока верстал, указал чтобы то что я делаю для мобильника показывалось для компа, то есть вместо <?php if($device_type !== 'desktop') { ?> <?php if($device_type == 'desktop') { ?>. А в конце вернул как надо.
#11 14 мая 2016 в 01:01
У мобильного варианта плюс в том что мы можем просто напросто вырезать весь лишний код который не будет востребован именно в мобильном варианте.
#12 14 мая 2016 в 01:08

Не очень понял что имеется в виду

Fuze
Выводить в зависимости от девайса разные файлы (при их наличии).
Как пример для записи:
тип_контента_item.tpl
тип_контента_все_мобильные_item.tpl
тип_контента_все_мобильные_планшет_item.tpl
Для списка аналогично.
#13 14 мая 2016 в 02:29

тут скорее всего эмулятор нужен,

Atid — Gorec
может это поможет тыц
#14 14 мая 2016 в 02:34

может годится тыц

Ne OS
Не не, это не то, нам нужно чтобы к серверу шел запрос от лица мобильного агента, по ссылке эмуляция только размеров окон. В коде страницы при просмотре по этой ссылке выдает что я с компа desktop_device_type .
Скорее всего нам необходим http://www.opera.com/ru/developer/mobile-emulator
#15 14 мая 2016 в 13:01
  1.  
  2. $detect = new Mobile_Detect;
  3. if ($detect->isMobile() ) {
  4. мобильное устройство
  5. }else {
  6. ПК
  7. }
  8.  
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.