Переключение с мобильной темы на десктопную

Аватар пользователя GodZiLA GodZiLA 11 августа 2014 в 15:09

Всем доброго времени суток!
Вопрос вообщем-то отражён в теме, опишу чуть подробнее.
Есть 2 темы - мобильная и десктопная. Сабдомены использовать правильно, но не могу разобраться как, тыкал и Domain и SubDomain модули, пока ничего.
Временно нужно просто переключать тему в зависимости от девайса. Мониторил кучу разных модулей от простейшего Mobile Theme до theme key и прочих. У всех есть один большой минус - я не могу по нажатию на ссылку "перейти на основную версию сайта" сделать так, чтобы в дальнейшем использовалась только она.
Отсюда вопрос - как можно программно сменить тему, кроме как переписывать значение default_theme в БД и правка напрямую в settings.php?

Комментарии

Аватар пользователя GodZiLA GodZiLA 11 августа 2014 в 15:17

это всё замечательно, если бы суть была просто в смене стиля)
Но проблема то в том, что там помимо стилей ещё и некоторые ТМ, вьюхи и прочие непотребства специально для мобильной версии переделывались)

Аватар пользователя multpix multpix 11 августа 2014 в 15:34

"GodZiLA" wrote:
Есть 2 темы - мобильная и десктопная

но:
"GodZiLA" wrote:
Но проблема то в том, что там помимо стилей ещё и некоторые ТМ, вьюхи и прочие непотребства специально для мобильной версии переделывались)

т.е две версии сайта?
ну так и делайте попросту:
к примеру мобильную на субдомен - аля example.com и m.example.com,
ежели функ-л различен.

Аватар пользователя GodZiLA GodZiLA 11 августа 2014 в 15:52

То есть всё же придётся копаться с поддоменами...)
Спасибо за быстрый ответ) Будем разбираться, значит)

Аватар пользователя multpix multpix 11 августа 2014 в 16:33

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

адаптивность ресурса к различным платформам,
быстродействие ресурса - одни из его немаловажных жизненных факторов.

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

имхо:
чем городить в этом случае мультисайтинг (с общими пользователями и материалами),
лучше поработать с адаптивным отображением.
тобишь - существующие темы(а так-же вью и иные приблуды) взять, да и переписать; а не цепляться за них, как за единственно верное, только-лишь по тому, что оно уже есть.
не забывать про DRY
вот как-то так)

Аватар пользователя GodZiLA GodZiLA 11 августа 2014 в 17:06

Прям озадачили меня)
Спасибо, что всё так подробно и доходчиво объяснили!)
Теперь нужно будет думать, что сделать будет быстрее, поскольку мобильную тему делал другой программер, а мне лишь "выпала честь" научить их дружить друг с другом)
И больше всего беспокоит вопрос, а перейдёт ли с мобильника на полную версию, если будет реализовано через @media.

Аватар пользователя whiesam whiesam 11 августа 2014 в 21:28

"GodZiLA" wrote:
И больше всего беспокоит вопрос, а перейдёт ли с мобильника на полную версию, если будет реализовано через @media.

@media это свойство CSS. То есть дизайн один и тот же, но трансформируется от типа экрана. Пример: http://sl-7.ru (уменьшай ширину браузера и поймешь)

Аватар пользователя vlucas vlucas 11 августа 2014 в 22:27

Попробуйте zen - отличная тема, интеграция с drush, адаптивный дизайн - то что вам подойдёт, и куча других прелестей

Аватар пользователя GodZiLA GodZiLA 12 августа 2014 в 10:08

Спасибо за ответы) что такое @media знаю - верстал в своё время адаптивку) от того и вопрос, насколько круто будет переподключать css файлы программно, дабы с мобильника можно было зайти на фул-версию. Другие темы не помогут - там уже 2 отдельных дизайна свёрстаны и работают, вопрос именно в переключении между ними)

Аватар пользователя GodZiLA GodZiLA 12 августа 2014 в 15:44

Друзья, а как вы думаете, насколько реально переопределить функцию init_theme в template.php? В стандартной функции нет возможности передавать туда имя своей темы, интересно было бы попробовать.

Аватар пользователя drupby drupby 12 августа 2014 в 16:23

"GodZiLA" wrote:
Друзья, а как вы думаете, насколько реально переопределить функцию init_theme в template.php? В стандартной функции нет возможности передавать туда имя своей темы, интересно было бы попробовать.

global $custom_theme

https://www.drupal.org/node/224333#custom_theme

Аватар пользователя whiesam whiesam 12 августа 2014 в 16:33

"Василий Сергеевич" wrote:
Попробуйте zen - отличная тема, интеграция с drush, адаптивный дизайн - то что вам подойдёт, и куча других прелестей

Не пробуйте никогда Zen!)) Серьёзно. Хоть и адаптивная... и даже есть свой маленький но Grid. Это вообще не спасает. Для изучения адаптивности можно на разок. Но реальные темы на ней делать не вариант.

Аватар пользователя vlucas vlucas 12 августа 2014 в 18:20

whiesam wrote:
"Василий Сергеевич" wrote:
Попробуйте zen - отличная тема, интеграция с drush, адаптивный дизайн - то что вам подойдёт, и куча других прелестей

Не пробуйте никогда Zen!)) Серьёзно. Хоть и адаптивная... и даже есть свой маленький но Grid. Это вообще не спасает. Для изучения адаптивности можно на разок. Но реальные темы на ней делать не вариант.

Не соглашусь. Попробовать стоит. Главное разобраться, посмотрите только какое количество загрузок у неё

Аватар пользователя whiesam whiesam 12 августа 2014 в 19:18

"Василий Сергеевич" wrote:
Не соглашусь. Попробовать стоит. Главное разобраться, посмотрите только какое количество загрузок у неё

Попробовать стоит - это и я написал.

Плохо когда ты подвержен стадному инстинкту. Ну вот по статистике Joomla популярнее Drupal в десятки раз, но бл**ть это не значит что она лучше. Она просто стала популярной ранее.

Аватар пользователя vlucas vlucas 12 августа 2014 в 22:41

"whiesam" wrote:
Плохо когда ты подвержен стадному инстинкту. Ну вот по статистике Joomla популярнее Drupal в десятки раз, но бл**ть это не значит что она лучше. Она просто стала популярной ранее.

Да это всё поняно )))
Просто у меня было так: попробовал сначала zen - тоже не понравилась. После ооочень продолжительного времени снова вернулся, изучил более глубоко - теперь делаю только на zen. По поводу загрузок довод, согласен, не убеждает, но вот 128K сайтов, которые сообщают об установленном zen заставляют задуматься. К тому же эта тема очень хорошо и понятно документирована. Хотя, может быть вы и правы, раз вы уже использовали zen - вам есть с чем сравнивать, я же, увы, bootstrap не юзал.

Аватар пользователя organizm organizm 13 августа 2014 в 12:27

Решал подобную задачу под wordpress.
Логика была следующей:
- если мобильное устройство то основная тема налету менялась на мобильную. но нюанс в том что мобильная тема не устанавливалась как основная, а подменялась только для конкретного пользователя. поскольку если ее ставить в curent то она будет отображатся и для всех остальных пользователей.
- для переключения на десктоп/моб использовал кукисы.

Я думаю такое на дорупале тоже возможно реализовать.

Аватар пользователя GodZiLA GodZiLA 13 августа 2014 в 15:54

так и пытаюсь делать )
вот только очень странная проблема возникла - не хотят с модулем работать ни $_COOKIES ни $_SESSIONS. Вообще ни в какую. Не понимаю в чём дело.

Аватар пользователя GodZiLA GodZiLA 14 августа 2014 в 11:23

Вообщем, не могу разобраться в чём дело.
Пытаюсь запилить сессии для мониторинга, что человек нажал.
Создал свой модуль. По умолчанию, если человек заходит с мобильника, ему выдаётся соответствующая версия, это работает нормально. Далее, при нажатии на "Полная версия сайта" его перебрасывает на фульную версию (с помощью GET запроса), а в модуле в function switch_devices_init() идёт проверка, что если GET запрос нужный, то $_SESSION['version']='desktop' и меняем тему. Это тоже работает, а page.tpl основной темы принимаю сессионную переменную - всё ок. В модуле же стоит проверка, если переменная в сессии равна desktop, то выходить из функции, то есть - оставлять ту тему, которая включилась ранее. Пробую перейти по ссылке с главной - снова перебрасывает на мобильную версию, и, что действительно странно, в page.tpl мобильной версии принимаю ту же сессионную переменную - а её там нет.
P.S. Пользователь с uid=0 есть, таблица сессий была восстановлена через TRUNCATE