вопрос по ООП и mvc

mount

Новичок
Здравствуйте!
Недавно начал изучение ООП и mvc, и в процессе создания сайта появился вопрос:
сайт планируется на нескольких языках, и при заходе на сайт в зависимости от url определяется какой язык выбран. На основании языка генерируются дальнейшией ссылки на сайте. Т.е. как только посетитель зашел на сайт, сразу в неком классе определяется выбранный язык, поэтому есть необходимость во многих классах знать выбранный язык, а также необходимо знать текущую страницу, на которой находится пользователь.
Так вот вопрос:
правильно ли будет если сразу запуская сайт, в нужном классе определять язык сайта и какую страницу открываем (router) и через define сделать их константами, т.е. dedine(LANG,$lang);define(ROUTER,$router) и использовать их где нужно?
или так делать нежелательно и как появляется необходимость узнать язык и текущую страницу- следует обращаться к нужному классу и узнавать?
 

Фанат

oncle terrible
Команда форума
Самый кошерный способ - это делать субдомен.
тогда не придётся вообще менять ссылки для разных языкофф.
 

fixxxer

К.О.
Партнер клуба
Субдомен не отменяет необходимости протаскивать language =)

Если хочется настоящего ООП, что-то типа $this->getRequest()->getLanguage().
Если не очень хочется, что-то типа App::$lang
 

mount

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

mount

Новичок
Субдомен не отменяет необходимости протаскивать language =)

Если хочется настоящего ООП, что-то типа $this->getRequest()->getLanguage().
Если не очень хочется, что-то типа App::$lang
А если в самом начале открытия сайта определять через $this->getRequest()->getLanguage() язык, и потом назначить его через define() константе?
В принципе назначение происходит в начале работы, и в процессе работы, пока пользователь не перейдет на другую страницу, не меняется
 

SiZE

Новичок
Я бы упростил себе задачу, написав класс для генерации ссылок. При инициализации ядра устанавливал необходимые параметры объектам связанным с языком. А передавать какой выбран языка в ссылке для СЕО надо?
 

fixxxer

К.О.
Партнер клуба
А если потом понадобится разослать кроном пачку писем по списку пользователей, и у каждого свой язык?
 

fixxxer

К.О.
Партнер клуба
Ну ты же спрашиваешь про ООП, а не "как в принципе можно сделать". В принципе можно сделать define но это не имеет никакого отношения к ООП ;)
 

mount

Новичок
Я бы упростил себе задачу, написав класс для генерации ссылок. При инициализации ядра устанавливал необходимые параметры объектам связанным с языком. А передавать какой выбран языка в ссылке для СЕО надо?
проблема в том, что ссылки будут генерироваться динамически, и нужно в зависимости от языка разные ссылки.
Передавать какой язык нужно не для СЕО, а для удобства- например на сайте язык по умолчанию английский, и стоят ссылки на языки: lt,ee,en,ru. все ссылки вида domain.ru/ru/ или domain.ru/ee/. Но если по умолчанию язык английский, то у ссылок его указывать не следует, поэтому нужно знать какой язык выбран
 

С.

Продвинутый новичок
Можно и так, и так. Но со временем и с ростом приложения понимаешь, что складывать вещи в глобальную область не стоит. Все должно лежать на предназначенной для этого полочке/шкафчике.
 

WMix

герр M:)ller
Партнер клуба
яб запихал бы язык в сессию и не мучался... да на любую страничку можно послать $_GET['lang'] это обработается еще в bootstrag записав язык и переключив его для дальнейшей обработки, кстати дальнейшая обработка может включать в себя генерацию ссылок
 

mount

Новичок
Ну ты же спрашиваешь про ООП, а не "как в принципе можно сделать". В принципе можно сделать define но это не имеет никакого отношения к ООП ;)
ну да, мне как раз и интересно, в ооп-е и mvc допустимо ли чтобы те переменные, которые не будут изменяться в процессе работы сайта, сразу определить как константы?
Просто в данном случае константы определяются не сразу, а запустив определенный класс.
 

SiZE

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

Передавать какой язык нужно не для СЕО, а для удобства- например на сайте язык по умолчанию английский, и стоят ссылки на языки: lt,ee,en,ru. все ссылки вида domain.ru/ru/ или domain.ru/ee/.
Тогда еще проще записать выбранный пользователем язык в $_COOKIE
 

mount

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


Тогда еще проще записать выбранный пользователем язык в $_COOKIE
а чем куки лучше константы?
 

Фанат

oncle terrible
Команда форума
ну-ну
интересно, а пользователи на этом сайте предусмотрены?
 

Sender

Новичок
Как я реализовывал примерно то же самое.

Определение языка реализовано в контроллере. Он аттачит к реквесту определенный язык и очищенный URL от языка, который используют другие контроллеры ниже по стеку (например контроллеру Page нужен очищенный URL для работы маршрутов). Язык запоминается в сессии, генерировать ссылки снова с указанием языка нет необходимости, если пользователь копирует ссылку и передает другому пользователю - то у другого пользователя может быть другой язык.

Все контроллеры ниже имеют доступ к реквесту и соответственно могут узнать какой язык выбран.

Способ формирования ссылки с языком может быть разный, это может быть и домен, и /ru и ?lang=ru и т.п. Просто надо подсунуть нужного "чистильщика" и "определятора" языка.
 

mount

Новичок
Как я реализовывал примерно то же самое.

Определение языка реализовано в контроллере. Он аттачит к реквесту определенный язык и очищенный URL от языка, который используют другие контроллеры ниже по стеку (например контроллеру Page нужен очищенный URL для работы маршрутов). Язык запоминается в сессии, генерировать ссылки снова с указанием языка нет необходимости, если пользователь копирует ссылку и передает другому пользователю - то у другого пользователя может быть другой язык.

Все контроллеры ниже имеют доступ к реквесту и соответственно могут узнать какой язык выбран.

Способ формирования ссылки с языком может быть разный, это может быть и домен, и /ru и ?lang=ru и т.п. Просто надо подсунуть нужного "чистильщика" и "определятора" языка.
вот как раз если обойтись без сессий и кук, то пользователь может передавать ссылку другому пользователю с выбранным языком.
Т.е. определение нужных параметров через константы- совсем плохо?
 
Сверху