Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
Разные шаблоны для разных доменов http://forum.kohanaframework.su/viewtopic.php?f=2&t=698 |
Страница 1 из 2 |
Автор: | Manyahin [ 08 июл 2013, 14:14 ] |
Заголовок сообщения: | Разные шаблоны для разных доменов |
С каханой раньше не работал, пришлось доделовать проект другово чувака. Мне нужно нацепить на движок, еще один шаблон для мобильной версии. Для входа на мобильную версию, нужно использовать дополнительный домен m.site.ru и соотетственно показывать другой дизайн сайта. m.site.ru и site.ru по сути ссылаются на один и тот же сайт. Условием вывода дизайна, занимается кохана. Я примерно разобрался как это сделать, в каждом контроллере в методе before() {} можно вставить проверку на домен, и если он соответствует мобильной версии, то подгружать другой шаблон. Код:
Не уверен, насчет правильности такого решения, посколько придется перелопатить кучу файлов. Думал, делать эту проверку на уровне classes/controller/template.php. Добавив дополнительную переменную во все контроллеры. Примерно таким способом: Код:
Но, такой вариант у меня не работает, переменная mobile всегда false. Ищу оптимальное решение, как сделать для одного ядра, две версии дизайна, один для сайта и один для мобильной версии. Редирект на мобильные устройства буду делать на уровне nginx. http://stackoverflow.com/questions/2764 ... subdomains |
Автор: | WinterSilence [ 08 июл 2013, 14:32 ] |
Заголовок сообщения: | Re: Разные шаблоны для разных доменов |
а var_export($_SERVER) не судьба сделать и посмотреть? Как вариант можно еще Reques::$user_agent проверять, для авто выбора типа дизайна. готовое решение http://code.google.com/p/php-mobile-det ... ile_Detect |
Автор: | Manyahin [ 08 июл 2013, 14:51 ] |
Заголовок сообщения: | Re: Разные шаблоны для разных доменов |
У меня нет проблем с определением мобильных пользователей. Моя проблема заключается в том, что я не знаю как оформить Controller Template, что бы он передовал это в дочерные контроллеры. Т.к. изменять каждый контроллер и вставлять туда проверку на наличие мобильного устройства, явный бред. Поэтому хочется загнать это уровнем повыше, в данном примере в Controller Template. Но с тем примером, что я привел в последнем листинге, у всех классов наследуемых от Controller_template $mobile всегда false. Что похоже на ошибку, значит я неправильно назначаю эту переменную или проверяю. Почему ее не видно в наследуемых классах? |
Автор: | Manyahin [ 08 июл 2013, 15:05 ] |
Заголовок сообщения: | Re: Разные шаблоны для разных доменов |
Это моя ошибка, разобрался. Оказывается у меня все контроллеры наследуются от Controller_Site. Поэтому надо было добавить проверку на домен к именно этому контроллеру в before(). А не морочить голову и создавать Controller_Template. Теперь все контроллеры видят, если сайт является мобильной версией. |
Автор: | WinterSilence [ 08 июл 2013, 15:06 ] |
Заголовок сообщения: | Re: Разные шаблоны для разных доменов |
идея у Вас верная, осталось отловить ошибку var_export($_SERVER) что возвращает? if($_SERVER['HTTP_HOST'] == 'm.site.ru') а будет ли данная проверка работать если ввести сайт с www.? мелкое замечание: parent::before(); старайтесь вначале before метода вызывать, а after соответственно в конце |
Автор: | Manyahin [ 08 июл 2013, 15:22 ] |
Заголовок сообщения: | Re: Разные шаблоны для разных доменов |
@WinterSilence спасибо за помощь. Кстати, нет, не будет xD Надо будет поправить. var_dump($_SERVER) вернет мне параметры сервера, запроса, хоста и домена. Это самое просто решение, что бы определить, что домен является m.site.ru. На данный момент, я так и делаю. Поэтому в родительском контроллере Controller_Site, от которого наследуются все другие контроллеры. Я добавил пару строк в метод before(). Код:
Если я помещяю parent::before(); выше условия, то сайт падает в бесконечный луп. Поэтому оставил после. Теперь во всех дочерних классах, которые наследуются от Controller_Site. Я делаю проверку на мобильну версию, и если это так, то подгружаю другой шаблон. Код:
Возможно это не самое элегантное решение которое можно придумать, но оно полностью решает мою проблему с разными шаблонами для разных доменов с одним Kohana ядром. Повторюсь, как только мобильная версия будет готова, можно будет на nginx поставить проверку на мобильных пользователей и автоматически их редектить на мобильную версию сайта. И кохана сама выведит нужный шаблон. Вроде это достаточно быстрое решение. Будет интересно услышать другие, более элегантные решения этой проблемы. |
Автор: | WinterSilence [ 08 июл 2013, 15:50 ] |
Заголовок сообщения: | Re: Разные шаблоны для разных доменов |
$position = UTF8::strpos($str, $search); http://kohanaframework.org/3.3/guide-api/UTF8#strpos чтоб уж наверняка... var_export нужен был чтобы убедится, что в переменной именно те данные что и ожидалось т.к. где-то в коде могли быть преобразования(код все-таки не ваш). по поводу after before это скорее правило хорошего тона в кохане, не обязательно им следовать, но желательно. единственный альтернативный вариант, это организация отдельного приложения для мобильной версии: геморроя больше, но затраты ресурсов в разы меньше |
Автор: | Manyahin [ 08 июл 2013, 16:10 ] |
Заголовок сообщения: | Re: Разные шаблоны для разных доменов |
Теперь, когда я использую ссылки вида <?=url::site(I18n::$lang.'/user/pre_register');?> в своем шаблоне под мобильное устройства. Они по прежнему ссылаются на www.site.ru.. а не m.site.ru. Полагаю, надо в родительском контроллере так же поменять url сайта? Как это сделать? |
Автор: | WinterSilence [ 08 июл 2013, 16:21 ] |
Заголовок сообщения: | Re: Разные шаблоны для разных доменов |
а зачем вам безусловные ссылки? сделайте относительные т.е. вида /blabla/, хотя судя по коду http://kohanaframework.org/3.3/guide-api/URL#base если вы открываете m.site.ru/blabla/ , то ссылки на открытой странице должны быть верные, если нет то скорректируйте вызов parse_url в методе URL::base. вообще ссылки строятся с помощью Route::url |
Автор: | Manyahin [ 08 июл 2013, 17:54 ] |
Заголовок сообщения: | Re: Разные шаблоны для разных доменов |
Безусловные ссылки мне нужны, т.к. сайт использует i18n Спасибо, поправил метод URL::base, теперь ориентируется от HTTP_HOST, а не от Kohana::$base_url. Код:
|
Страница 1 из 2 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |