Мобильный сайт | Смена шаблона

#16 19 января 2016 в 22:32

В общем идею подал,

Михаил
Извините, воспользуюсь случаем для бесплатной рекламы: одна из небольших возможностей шаблона
Norm Gold, понимаю, что вы спрашивали не о таком решении. zst
#17 19 января 2016 в 22:46


Добрый вечер! Вот появилась такая идея на счёт мобильной версии. Мне это очень как стало необходимо так как приходится сделать мобильную версию сайта очень отличающуюся от дескстопной, вот и появилась такая идея. А что если просто в файл шаблона template.php вставить две версии размещения блоков модулей и всего прочего именно в самом теле() просто отделить их проверкой устройства с которого заходят через условный оператор php если мобильное устройство, то показать размещение блоков мобильной версии, если нет, то шаблон компьютерной версии. Пожалуй это должно решить основную проблему, а всё остальное можно через css поправить. В общем идею подал, если кому-то интересно пишите в тему, я как раз завтра попытаюсь реализовать свою идею и отпишусь о результате если тема ещё актуальна для вас.

Михаил

Не выдержал и написал сразу, дабы проверить. Как я и предлагал, редактировал я template.php который непосредственно находится в папке каждого шаблона Instant CMS.
Чтобы с нуля не писать, php код немного позаимствовал у picaboo с темы "Мобильная версия" и вот что получилось:

  1.  
  2. </head>
  3. <?php
  4. function check_smartphone() {
  5.  
  6. $phone_array = array('iphone', 'android', 'pocket', 'palm', 'windows ce', 'windowsce', 'cellphone', 'opera mobi', 'operamobi', 'ipod', 'small', 'sharp', 'sonyericsson', 'symbian', 'symbos', 'opera mini', 'nokia', 'htc_', 'samsung', 'motorola', 'smartphone', 'blackberry', 'playstation portable', 'tablet browser', 'android');
  7. $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
  8.  
  9. foreach ($phone_array as $value) {
  10.  
  11. if ( strpos($agent, $value) !== false ) return true;
  12.  
  13. }
  14.  
  15. return false;
  16.  
  17. }
  18. if (check_smartphone())
  19. {
  20. ?>
  21. <!-- Мобильная версия сайта-->
  22. <body <?php if ($_SERVER["REQUEST_URI"] == '/') { ?> id="homepage" <?php } else {?> id="innerpage"<?php } ?>>
  23. ....
  24. ....
  25. ....
  26. </body>
  27. <?php
  28. }
  29. else
  30. {
  31. ?>
  32. <!-- Дескстопная версия сайта-->
  33. <body <?php if ($_SERVER["REQUEST_URI"] == '/') { ?> id="homepage" <?php } else {?> id="innerpage"<?php } ?>>
  34. ....
  35. ....
  36. ....
  37. </body>
  38. <?php
  39. }
  40. ?>
  41. </html>
  42.  
Немного прокомментирую код: если на сайт входят с мобильного устройства, то показываем содержимое контейнера body мобильной версии сайта, иначе показываем компьютерную версию контейнера.
Можно конечно поэкспериментировать и скажем в условный оператор добавить не только body, но и весь шаблон html, но это уже на следующий раз.

Рад если кому-нибудь помог такой идеей.
#18 19 января 2016 в 22:55
Я у себя делаю так. В файле core/cms.php где то после блока

  1. //проверяем был ли переопределен язык через сессию
  2. if (isset($_SESSION['lang'])) { $inConf->lang = $_SESSION['lang']; }
  3. self::loadLanguage('lang');
вставил такой блок
  1.  
  2. $smartphone = strtolower($_SERVER['HTTP_USER_AGENT']);
  3. if(stripos($smartphone,'android') !== false) { $inConf->template = 'm';}
  4. if(stripos($smartphone,'iPod') !== false) { $inConf->template = 'm';}
  5. if(stripos($smartphone,'iPhone') !== false) { $inConf->template = 'm';}
  6. if(stripos($smartphone,'iPad') !== false) { $inConf->template = 'm';}
  7. if(stripos($smartphone,'iOS') !== false) { $inConf->template = 'm';}
  8. if(stripos($smartphone,'BlackBerry') !== false) { $inConf->template = 'm';}
  9. if(stripos($smartphone,'Windows Mobile') !== false) { $inConf->template = 'm';}
  10. if(stripos($smartphone,'Opera Mini') !== false) { $inConf->template = 'desktop';}
  11. if(stripos($smartphone,'appz') !== false) { $inConf->template = 'appz';}
  12. if(stripos($smartphone,'appn') !== false) { $inConf->template = 'appn';}
здесь
m — название мобильного шаблона
appn — название шаблона для андроид приложения
desktop — название основного шаблона
#19 19 января 2016 в 23:12

Я вообще-то даже не спрашивал

Михаил
Разве я где-то говорил что вы спрашивали?

я делился идеей

Михаил
С нами ею поделились 150 лет назад

И убедительно прошу

Михаил
Вот так вот сразу и "убедительно"?

а для вашего поста место

Михаил
Это решать, к счастью, не вам.
#20 19 января 2016 в 23:28


Я у себя делаю так. В файле core/cms.php где то после блока

  1. //проверяем был ли переопределен язык через сессию
  2. if (isset($_SESSION['lang'])) { $inConf->lang = $_SESSION['lang']; }
  3. self::loadLanguage('lang');
вставил такой блок
  1.  
  2. $smartphone = strtolower($_SERVER['HTTP_USER_AGENT']);
  3. if(stripos($smartphone,'android') !== false) { $inConf->template = 'm';}
  4. if(stripos($smartphone,'iPod') !== false) { $inConf->template = 'm';}
  5. if(stripos($smartphone,'iPhone') !== false) { $inConf->template = 'm';}
  6. if(stripos($smartphone,'iPad') !== false) { $inConf->template = 'm';}
  7. if(stripos($smartphone,'iOS') !== false) { $inConf->template = 'm';}
  8. if(stripos($smartphone,'BlackBerry') !== false) { $inConf->template = 'm';}
  9. if(stripos($smartphone,'Windows Mobile') !== false) { $inConf->template = 'm';}
  10. if(stripos($smartphone,'Opera Mini') !== false) { $inConf->template = 'desktop';}
  11. if(stripos($smartphone,'appz') !== false) { $inConf->template = 'appz';}
  12. if(stripos($smartphone,'appn') !== false) { $inConf->template = 'appn';}
здесь
m — название мобильного шаблона
appn — название шаблона для андроид приложения
desktop — название основного шаблона

Нил™

Интересное решение, надо будет потестить smile
#21 5 февраля 2016 в 21:16
А как быть с кэшированием модулей? Если стоит кэширование модулей, то ничего не будет сбиваться? Кто-то зашёл с компьютера, кто-то с телефона… вертикальное меню опять же.
#22 5 февраля 2016 в 21:25
classics, в последних версиях инстанта для разных шаблонов разный кэш
#23 6 февраля 2016 в 03:21
Нил™,

Имхо, такие такие вещи лучше в switch оформлять.
#24 6 сентября 2016 в 18:33


Я у себя делаю так. В файле core/cms.php где то после блока

  1. //проверяем был ли переопределен язык через сессию
  2. if (isset($_SESSION['lang'])) { $inConf->lang = $_SESSION['lang']; }
  3. self::loadLanguage('lang');
вставил такой блок
  1.  
  2. $smartphone = strtolower($_SERVER['HTTP_USER_AGENT']);
  3. if(stripos($smartphone,'android') !== false) { $inConf->template = 'm';}
  4. if(stripos($smartphone,'iPod') !== false) { $inConf->template = 'm';}
  5. if(stripos($smartphone,'iPhone') !== false) { $inConf->template = 'm';}
  6. if(stripos($smartphone,'iPad') !== false) { $inConf->template = 'm';}
  7. if(stripos($smartphone,'iOS') !== false) { $inConf->template = 'm';}
  8. if(stripos($smartphone,'BlackBerry') !== false) { $inConf->template = 'm';}
  9. if(stripos($smartphone,'Windows Mobile') !== false) { $inConf->template = 'm';}
  10. if(stripos($smartphone,'Opera Mini') !== false) { $inConf->template = 'desktop';}
  11. if(stripos($smartphone,'appz') !== false) { $inConf->template = 'appz';}
  12. if(stripos($smartphone,'appn') !== false) { $inConf->template = 'appn';}
здесь
m — название мобильного шаблона
appn — название шаблона для андроид приложения
desktop — название основного шаблона

Нил™
Тестирую, не работает. что не так?
#25 6 сентября 2016 в 22:07

что не так?

Олег с клещами

не после этого

  1. //проверяем был ли переопределен язык через сессию
  2. if (isset($_SESSION['lang'])) { $inConf->lang = $_SESSION['lang']; }
  3. self::loadLanguage('lang');
а после вот этого

  1. //проверяем был ли переопределен шаблон через сессию
  2. if (isset($_SESSION['template'])) { $inConf->template = $_SESSION['template']; }
где то строка №100 cms.php
#26 7 сентября 2016 в 10:25
Нил™, не получается. Ничего не переключается. Версия 1.10.7
#27 7 сентября 2016 в 12:23
Странно, так как приведённый выше пример у меня на рабочем сайте и работает в 100% случаев, на 1.10.6.
Сейчас проверил на 1.10.7 — тоже нормально работает этот вариант.
Я бы проверил
а) как определяется USER AGENT
б) что там с шаблонами, не возникло ли какой то путаницы
в) если ставили разные шаблоны на пункты меню, на всякий случай проверил бы тут, хотя по идее не должно влиять.

других идей нет)
#28 7 сентября 2016 в 13:22
Тьфу! Одну букву в названии шаблона перепутал. Всё работает. Классное решение!
#29 25 января 2017 в 19:39


Я у себя делаю так. В файле core/cms.php ...

Нил™

Спасибо, Нил! Гениальное решение. Мне очень помогло. v
#30 25 января 2017 в 19:59

Спасибо, Нил! Гениальное решение. Мне очень помогло

Карен М.
Пожалуйста. Windows Phone еще добавьте в список агентов.

Что бы еще придумать, что бы вне зависимости от устройства отдавать полную версию сайта если разрешение экрана = или > 1000px
Как я понимаю получить разрешение экрана это только использовать java script но зависить от него в этом вопросе не хотелось бы.

У меня почти все сайта по ширине 1000 px и для планшетов с подходящим экраном лучше показывать полную версию. Она и красочнее и функций больше. Кто нибудь подскажет что нибудь толковое?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.